Repository navigation
feat: a new message has no header title, and the Attach sheet shows icons #137 - #138
Merged
rathlinus merged 3 commits intoNov 15, 2026
Merged
Conversation
…cons The composer header read "New Message" above fields that already say what the screen is; a new message now leaves it empty. Reply, Reply All and Forward keep their titles, and the draft status line still shows. The Attach sheet rows get icons (image, camera, phone, folder) and names that tell the two file sources apart: "This device" opens the system file picker, "Bulwark Files" the user's Files on the server. Before, the pair read "Upload from this device" and "Attach from Files", which looked like the same thing twice. On Android the photo library is "Gallery"; iOS keeps "Photos & Videos". The three new strings are in every locale under locales/rn: "This device" and "Files" reuse the webmail's own translations, the word for Gallery is machine-made.
…lwarkmail#137 A new message has no header title any more, so the flows that waited for "New Message" wait for the header's testID, compose-header, and the compose flow asserts "This device" instead of the old file label. The sheet's icon is a ready node, as in ActionSheetItem.
…eads naturally in each language bulwarkmail#137 With no visible title, the header's title area was empty and had no height, so TalkBack skipped it. It now stretches to the header and reads the webmail's "New message", with the draft status after it. The Files row followed the English word order everywhere; each locale now puts "Bulwark" where its own grammar does (ar, he, fa after the noun, so the label also runs right to left). The offline-send wiring test cut the send code at `const titleKey`, which is gone; it cuts at `const headerTitle` now.
wmcparla
marked this pull request as ready for review
November 13, 2026 22:35
|
I found no problems in this change, and the
Bulwark Warden is an AI assistant and can be wrong. It answers from the docs, the code and earlier issues, and links its sources. |
Member
|
Thanks, merged. Main had moved the photo picker steps of 03-compose-send into subflows/pick-photo.yaml since you branched, so I switched that subflow to compose-header as well, and added the three strings for Greek, Nynorsk and Vietnamese, which came to main in the meantime. |
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.
Summary
Two finishing touches to the composer from #137. A new message no longer shows "New Message" in its header, because the empty fields below already say what the screen is. The Attach sheet gets an icon on each row, and the two file sources get names that tell them apart: "This device" for the phone's files and "Bulwark Files" for the user's Files on the server. Before, they read "Upload from this device" and "Attach from Files", which looked like the same thing twice.
Changes
email_composer.new_message, already in every locale), followed by the draft status. The title area stretches to the header's height when it is empty; without that it had no height and TalkBack skipped it.testID,compose-header, for the Maestro flows.SheetOptiontakes an optionaliconnode, asActionSheetItemdoes. The icons match the attachment action sheet (18 px,textSecondary): image, camera, phone, and theFolderOpenthat "Save to Files" uses.locales/rn/*.jsonfor every locale:attach_gallery,attach_this_device,attach_bulwark_files.settings.notifications.push.device_this, and the "Files" in "Bulwark Files" is itssidebar.files.03-compose-send,08-scheduled-sendandperf/3-composewaited for "New Message"; they now wait forid: compose-header. The compose flow asserts "This device" instead of"Upload from this device|Files".compose-send-queue-wiring.test.tscut the send code atconst titleKey, which is gone; it now cuts atconst headerTitle. Without that change it still passed, but it searched the rest of the file.Related issues
Closes #137
Type of change
Checklist
npm run typecheckand there are no errors (native has nolintscript)npm run buildin native; an x86_64 release APK,assembleGithubRelease -PallowDebugSignedRelease=true, builds and runs)locales/) if my changes affect user-facing text (every locale inlocales/rn;npm run i18n:checkpasses)Tests:
npx vitest run: 7103 passed, 163 skipped (the live Stalwart suites), 0 failed.Tested by hand on the Android 16 emulator (1080x2424, 420 dpi), with an account whose server keeps Files:
id: compose-header, open Attach, check the four rows, Cancel, wait again) passes.Not tested: iOS. The
id: compose-headerselector is the flows' first on a plainViewrather than a button or input; RN setsaccessibilityIdentifierfromtestID, so XCUITest should list it, but one run of03-compose-sendon the simulator would confirm it.Screenshots / demo
Notes for reviewers
email_composer.attach_from_files, and in the picker it reads fine.attach_photosstays in use on iOS, and the rest live in the vendored webmail catalogs.🤖 Generated with Claude Code