Skip to content

Add adjustable conversation message text size - #139

Merged
torlando-tech merged 14 commits into
mainfrom
feat/ios-message-text-size
Aug 4, 2026
Merged

Add adjustable conversation message text size#139
torlando-tech merged 14 commits into
mainfrom
feat/ios-message-text-size

Conversation

@torlando-tech

Copy link
Copy Markdown
Owner

Summary

  • add a persistent global conversation message-text scale matching Android's 70%-200% range and 10% steps
  • add a native iOS text-size picker with preview, provisional Cancel/OK behavior, Dynamic Type support, accessibility labels, and constrained-layout scrolling
  • scale only primary message body text while preserving reply previews, timestamps, reactions, and attachment labels
  • include the preference in migration export/import and localization catalogs
  • add normalization, migration, layout, accessibility, and 70%/100%/200% visual regression coverage

Fixes #135

Verification

  • 224 static tests passed, 1 skipped
  • 34 Swift package tests passed
  • 174 shipping app XCTest tests passed
  • 21 Model B XCTest tests passed
  • shipping post-processed Release ABI/artifact verification passed
  • Model B artifact-isolation verification passed
  • independent exact-head standards and spec-compliance reviews found no actionable findings
  • added-line sensitive-data scan and git diff --check passed

Visual verification

Verified normal and accessibility-width picker renderings plus long-message and reply-bubble renderings at 70%, 100%, and 200%. No clipping or unintended secondary-text scaling was observed.

Risk and rollback

The new preference defaults to 100%, so existing rendering is unchanged until the user selects another value. Removing this PR restores prior behavior; migrated backups without the preference retain the default.

@greptile-apps

greptile-apps Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a persistent, migration-compatible conversation message-body text scale and a native SwiftUI picker, while leaving secondary message metadata unscaled.

  • Stores normalized values from 70% through 200% in 10% increments.
  • Applies the scale to primary message text with Dynamic Type support.
  • Exports and imports the preference in migration bundles.
  • Adds localization, accessibility, layout, migration, and visual regression coverage.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete changed-code failure identified.

The preference is normalized at every persistence boundary, loaded into conversation state, restricted to primary message-body rendering, included symmetrically in migration export and import, and compiled into both app targets.

Important Files Changed

Filename Overview
Sources/ColumbaApp/Services/SettingsRepository.swift Adds finite-value normalization, clamping, step rounding, repair, and persistence for the global message-text scale.
Sources/ColumbaApp/Views/Messaging/MessagingView.swift Loads the persisted scale, presents the picker, saves confirmed changes, and passes the scale into message bubbles.
Sources/ColumbaApp/Views/Messaging/TextSizePickerSheet.swift Adds a scrollable, Dynamic-Type-aware picker with provisional state, preview, range controls, and accessibility metadata.
Sources/ColumbaApp/Views/Messaging/MessageBubble.swift Applies the selected scale only to primary message-body text using a body-relative scaled metric.
Sources/ColumbaApp/Services/MigrationExporter.swift Adds the normalized message-text scale to exported preferences as a double.
Sources/ColumbaApp/Services/MigrationImporter.swift Extracts settings import into a testable method and restores valid message-text scale preferences through repository normalization.
Columba.xcodeproj/project.pbxproj Includes the new picker source in both shipping and Model B app targets.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    User[Conversation menu] --> Picker[Text size picker]
    Picker -->|OK| Settings[SettingsRepository]
    Settings --> Defaults[App Group UserDefaults]
    Settings --> ViewState[MessagingView scale state]
    ViewState --> Bubble[MessageBubble primary body]
    Settings --> Exporter[MigrationExporter]
    Importer[MigrationImporter] --> Settings
Loading

Reviews (1): Last reviewed commit: "test: calibrate picker rendering bounds" | Re-trigger Greptile

@torlando-tech
torlando-tech merged commit 0fd3aa0 into main Aug 4, 2026
4 checks passed
@torlando-tech
torlando-tech deleted the feat/ios-message-text-size branch August 4, 2026 02:53
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.

android parity: text size slider

1 participant