* feat(healthchat): add member directory tab to home navigation
Third bottom-nav tab backed by the HealthChat API: searchable member
cards with native start-chat, approval-pending banner, retry on
failure and navigation into the native profile screens.
* fix(healthchat): stop tab back handler swallowing back presses
While a screen is pushed on top of Home, the still-composed tab
BackHandler intercepted back presses during the transition and
invisibly switched to the Chats tab. Gate it on the node's target
visibility in both the parent and Home's own backstack.
* fix(healthchat): satisfy detekt, ktlint and konsist rules
Import alias order, composable parameter order in HomeView, and konsist presenter helper shape.
* ci: pass the real repository name to the screenshot recorder
recordScreenshots.yml set GITHUB_REPOSITORY from `secrets.GITHUB_REPOSITORY`.
No such secret exists on this fork, so the expression expands to an empty
string and overrides the built-in environment variable of the same name.
recordScreenshots.sh checks it up front and exits 1 with "No repo specified",
so the workflow could never record anything here.
Use the `github.repository` context instead, which is always populated.
Claude-Session: https://claude.ai/code/session_01MQbp1EPM4TSXq8P8Pyq44F
* Update screenshots
* Revert "Update screenshots"
This reverts commit b99e0d643f.
* Reapply "Update screenshots"
This reverts commit 85bceb6d67.
* test(screenshots): stop a LayoutLib teardown crash failing the shard tests
Paparazzi 2.0.0-alpha05 / LayoutLib 16.2.1 races on HandlerThread startup:
HandlerThread_Delegate.run calls Process.setThreadPriority, which throws
NoSuchMethodError for Thread.setPosixNicenessInternal and kills the
"android.bg" thread. If the test thread reaches getLooper() after that, it
gets null, BackgroundThread.ensureThreadReady() NPEs, and the static
initialiser of LatencyTracker fails. The JVM then marks that class erroneous
for the lifetime of the fork, so every later preview showing the soft
keyboard dies with NoClassDefFoundError.
LayoutLibErrorFilterStatement already swallowed the bare NoSuchMethodError,
but PaparazziLogger re-throws collected background errors from teardown()
wrapped in a MultipleFailuresException when there is more than one, and that
wrapper slipped through. A recent run reported 17 failures with zero image
comparisons failing and zero delta images written.
Unwrap the wrapper by reflection and swallow it only when every collected
cause matches the known-bug list; anything unrecognised, and anything that
cannot be decomposed, is rethrown.
Also close a hole this filter had from the start. Paparazzi runs the test as
`try { body } finally { teardown() }`, so a teardown error discards whatever
the body threw — including a genuine snapshot mismatch. renderFailureCapture
is registered inside the Paparazzi rule to record the body's exception so it
wins over any teardown error, and the filter refuses to swallow anything if
that rule is not registered. Two HorizontalFloatingToolbar previews have been
mismatching silently behind this, and may now surface as real failures.
Claude-Session: https://claude.ai/code/session_01MQbp1EPM4TSXq8P8Pyq44F
---------
Co-authored-by: ElementBot <android@element.io>
PreferencesRootPresenter and HomePresenter were updating the latest session
in the session store directly, relying on RootNavStateFlow to trigger the
navigation as a side effect. Changing the current session is app-level
navigation, so it is now forwarded through a new `navigateToSession` callback
up to RootFlowNode, which performs the session store update.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Show a one-time bottom sheet on the home screen to announce that several
accounts can now be added (element-hq/element-meta#3349).
- Add `Announcement.MultiAccount`, which is never shown by default.
- AppMigration11 queues the announcement on application upgrade only,
and marks it as shown if the user already has several accounts.
- HomePresenter shows the bottom sheet only when the announcement is
pending, the MultiAccount feature flag is enabled and the user has a
single account.
- The "Add account" button hides the sheet, marks the announcement as
dismissed and starts the add account flow through the new
`HomeEntryPoint.Callback.navigateToAddAccount()`.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* Allow creating a space with `CreateRoomParameters`
* Add 'Create space' menu item in the spaces home screen. Also, imports new strings related to spaces.
* Link the 'Create space' button with the screen to create the space
* Unify room access and visibility for `ConfigureRoom`, use the updated design
* Fix `EditRoomDetails` avatar size (68dp)
* Replace `EditableAvatarView` and `UnsavedAvatar` copmonents with `AvatarPickerView`
* `AvatarDataFetcherFactory`: Make sure we use a fallback image fetcher when the URL is not an MXC one (a local one, i.e.). This removes the previous need for a separate `UnsavedAvatarView`
* Use `AvatarPickerView` in all the screens where `EditableAvatarView` was used
* Improve naming and previews
* Update strings, remove unused ones for `RoomAccessItem`
* Make `isSpace` part of the `CreateRoomConfig`
* Ensure the content fits in the screenshots for `AvatarPickerSizesPreview`
* Add `AvatarDataFetcherFactoryTest`
* Add new feature flag for creating spaces
* Fix ripple being too large for the `Pick` state
* Tweak margins and section titles a bit
* Add preview for `HomeTopBar` with the spaces case
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
* Load `JoinedRoom` in `HomeFlowNode.navigateToRoom`, then pass it to the next navigation nodes
* Add delayed loading indicator for cases when loading the room takes too long
* Avoid an extra FFI call in `RustRoomFactory`.
Use `RoomInfo.membership` instead.
Also use `computation` dispatcher, since it should reduce the delay when switching contexts.
* Remove the dispatcher usage when loading the room in `HomeFlowNode`, we immediately call a method that changes the dispatcher used
* Make sure only a single room is opened at a time