Commit Graph

14775 Commits

Author SHA1 Message Date
joel.poyet a907501c08 chore(release): prepare 26.08.0 release notes
Fold the member directory, profile editor, invite and status banner features into the unreleased 26.08.0 changelog section.
healthchat-v26.08.0
2026-08-06 13:41:23 +02:00
joel.poyet 7f43998fa5 Add profile editor, member invite and status banners (#4)
* feat(healthchat): add profile editor, member invite and status banners

Native 13-field profile editor with diff-only saves and avatar upload
through the HealthChat API (replaces the upstream display-name editor),
email invitation for approved accounts, and non-dismissible account
status banners in settings and the member directory.

* fix(healthchat): satisfy detekt and konsist rules

Konsist presenter helper shape, no '=' in state parameter docs, present-tense invite callback, and complete renderer KDoc.
2026-08-06 13:28:24 +02:00
joel.poyet edb3520c56 Add member directory tab to home navigation (#3)
* 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>
2026-08-06 13:10:01 +02:00
joel.poyet 0c78553641 Merge pull request #16 from Novaloop-AG/ci/screenshot-fork-per-test-class
Give each screenshot test class its own JVM
2026-08-06 10:49:24 +02:00
joel.poyet 081904345a ci: give each screenshot test class its own JVM
There are five screenshot test classes (PreviewShard1..4Test plus
PreviewA11yTest) and each shard renders roughly 770 previews in a single
process. Gradle reuses a forked JVM for the next test class once
maxParallelForks is exhausted, so on the current six-core runners
(forks = 3) two classes run second, inside a process that has already
rendered a full shard.

That matches the observed failure exactly: PreviewShard2Test and
PreviewShard4Test fail 100% while shards 1 and 3 pass 100%, and the split
holds even for byte-identical preview states. The previous eight-core
runners computed forks = 4, reused only one JVM, and were green on this
same tree.

forkEvery = 1 restarts the JVM after every test class. It costs five JVM
startups and no extra peak memory, unlike raising maxParallelForks to 5,
which would need 10 GB of test heap on a 19 GiB runner with no swap.

Claude-Session: https://claude.ai/code/session_01MQbp1EPM4TSXq8P8Pyq44F
2026-08-06 10:41:22 +02:00
joel.poyet ce180ef25b Merge pull request #2 from Novaloop-AG/feature/healthchat-profile-fields
Show HealthChat profile fields on profile screens
2026-08-05 15:24:31 +02:00
joel.poyet c7800abb0f test(healthchat): satisfy konsist presenter helper rule
Konsist requires createPresenter helpers to omit the return type.
2026-08-05 14:13:04 +02:00
joel.poyet 1aeb4655bc feat(healthchat): show profile fields on profile screens
Renderer slot in UserProfileView (all three profile screens) shows
specialty, practice, address, contact links and further info from
the HealthChat API, with inline retry on failure.
2026-08-05 14:13:04 +02:00
joel.poyet 2db4c9847f Add HealthChat API service layer (#1)
* feat(healthchat): add HealthChat API service layer

New features/healthchat modules: typed Retrofit client with
per-request Matrix token auth, member directory, profile and
invite services, plus test fakes and fixtures.

* test(healthchat): use runCatchingExceptions

Detekt's RunCatchingNotAllowed rule forbids plain runCatching.
2026-08-05 14:13:00 +02:00
joel.poyet 621df1dedf Merge pull request #14 from Novaloop-AG/chore/rerecord-goldens-on-vm-runners
Re-record screenshot goldens on the new VM runners
2026-08-05 14:12:35 +02:00
ElementBot ac264ea08c Update screenshots 2026-08-04 22:30:06 +02:00
joel.poyet c0c0b48470 Merge pull request #9 from Novaloop-AG/feature/healthchat-remove-analytics-onboarding
Remove the analytics opt-in screen from onboarding
2026-08-04 18:42:11 +02:00
joel.poyet fa08091528 fix(lint): drop dead onboarding title overrides 2026-08-04 18:13:03 +02:00
joel.poyet 399adf2276 feat(analytics): disable analytics unless credentials are configured
Removes the onboarding opt-in screen, the Analytics settings entry and
the unused Posthog and Sentry SDKs.
2026-08-04 18:13:03 +02:00
joel.poyet 67fb6744fe Merge pull request #12 from Novaloop-AG/chore/rerecord-paparazzi-goldens
Re-record the stale Paparazzi screenshot goldens
2026-08-04 18:12:28 +02:00
joel.poyet 3e1010ba07 test(screenshots): re-record the 39 stale Paparazzi goldens
Several captured blank or half-laid-out screens; ShareLocation also lost its
map pin now that no MapTiler key is configured.
2026-08-04 17:40:13 +02:00
joel.poyet 1eb530e727 Merge pull request #13 from Novaloop-AG/ci/skip-codecov-upload
Skip the Codecov upload when no token is configured
2026-08-04 17:39:36 +02:00
joel.poyet 0cd363b1c3 ci: skip the codecov upload when no token is configured 2026-08-04 17:10:38 +02:00
joel.poyet 31611e5499 Merge pull request #11 from Novaloop-AG/fix/healthchat-launcher-icon-lint
Fix launcher icon lint errors in the HealthChat app icon
2026-08-04 16:08:20 +02:00
joel.poyet fdf142db60 fix(icon): ship the monochrome launcher icons as webp
Matches upstream's format, which is what tools/lint/lint.xml already
exempts from IconExpectedSize.
2026-08-04 14:57:23 +02:00
joel.poyet 96db91de86 Merge pull request #10 from Novaloop-AG/fix/ci-runners-and-permissions
Move releases to the persistent self-hosted runners and fix CI checkout
2026-08-04 14:45:50 +02:00
joel.poyet e74db93344 ci: cap Gradle workers so test JVMs fit the container 2026-08-04 13:36:52 +02:00
joel.poyet 8c4ef9264b ci: record why the Gradle heap is reduced 2026-08-04 12:55:48 +02:00
joel.poyet 409a1e5b90 ci: report runner capacity on the self-hosted jobs 2026-08-04 12:43:27 +02:00
joel.poyet 2013b86dfe ci: size the Gradle heap for the self-hosted containers
Upstream's -Xmx8g/4g is sized for hosted VMs; here the daemon is SIGKILLed
and Gradle reports "the daemon has disappeared".
2026-08-04 12:28:42 +02:00
joel.poyet cedd070bfe ci: rely on the runner image for the Android SDK
Drops the setup-android step from the release job and gates the swapfile
resize, which needs a hosted runner image and passwordless sudo.
2026-08-04 11:04:07 +02:00
joel.poyet 0fcd7bcfce ci: run the heavy Gradle jobs on the self-hosted runners
Requires the Android SDK in the runner image. Also gates the disk-cleanup
step to hosted runners, where it would otherwise strip the host.
2026-08-04 08:42:36 +02:00
joel.poyet 0799ad5b73 ci: disable the Label Community PRs job on this fork 2026-08-04 08:07:51 +02:00
joel.poyet 9475ec3a48 ci: grant contents:read so checkout works on this private fork 2026-08-04 07:11:37 +02:00
joel.poyet 2221bf2972 ci(release): move releases to the persistent self-hosted runners
novaloop-incus-large is the GARM ephemeral pool, whose runners were reaped
mid-job; [self-hosted, Linux, X64] matches four persistent org runners.
2026-08-04 07:11:37 +02:00
joel.poyet 05df27fc3a Merge pull request #8 from Novaloop-AG/fix/play-upload-review-flag
Fix Play Store upload rejected for changesNotSentForReview
2026-08-03 14:45:36 +02:00
joel.poyet b4629fff90 fix(release): drop changesNotSentForReview from Play upload
Play now sends this app's changes for review automatically and the Edits
API rejects the parameter, so the AAB uploaded but the edit never committed.
2026-08-03 13:44:34 +02:00
joel.poyet 7bbbde76d1 Merge pull request #7 from Novaloop-AG/chore/release-26.08.0
Set version 26.08.0
2026-08-03 13:26:25 +02:00
joel.poyet ec0303606a chore(release): set version 26.08.0 2026-08-03 11:27:07 +02:00
joel.poyet b7bfc6f751 Merge pull request #6 from Novaloop-AG/feature/healthchat-deeplinks
Point deeplinks and shared permalinks at HealthChat hosts
2026-08-03 11:10:28 +02:00
joel.poyet ada6fc457b feat(share): share user permalinks via to.healthchat.ch
Mention pills keep the matrix.to wire format other clients expect.
2026-08-03 10:53:51 +02:00
joel.poyet 57a2e585ba feat(deeplink): point deeplinks at HealthChat hosts
Claims app.healthchat.ch and to.healthchat.ch as App Links, registers the
healthchat:// scheme, and drops the unreachable mobile.element.io handling.
2026-08-03 10:53:35 +02:00
joel.poyet d6ea73140e docs(release): document self-hosted runner and heap sizing healthchat-v26.07.0 2026-07-27 18:38:37 +02:00
joel.poyet a7e1217e82 fix(gplay): strip permissions Play Console rejects 2026-07-27 18:35:37 +02:00
joel.poyet 09b6d6341b ci(release): add HealthChat Play Store release pipeline 2026-07-27 18:35:36 +02:00
Sedat Qaja a1866b4b28 feat(branding): add HealthChat launcher icon and logo
Official cross-in-circle icon (same art as the iOS X app); onboarding
title localized for en/de/fr/it.
2026-07-16 14:13:00 +02:00
Sedat Qaja 2994430b88 feat(branding): rebrand app identity to HealthChat
App id ch.healthchat.element, locked matrix.healthchat.ch homeserver.
2026-07-16 11:03:52 +02:00
Benoit Marty 2f7748bc64 Merge branch 'release/26.07.0' 2026-07-01 10:07:43 +02:00
Benoit Marty 59b770a539 Adding fastlane file for version 26.07.0 2026-07-01 10:07:41 +02:00
Benoit Marty 7638c2704d Setting version for the release 26.07.0 2026-07-01 10:06:50 +02:00
renovate[bot] 92cb33008c Update dependency com.posthog:posthog-android to v3.51.1 (#7128)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-01 09:27:15 +02:00
ganfra de3361e339 Merge pull request #7127 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-26.x
Update dependency org.matrix.rustcomponents:sdk-android to v26.06.30
2026-06-30 22:01:48 +02:00
ganfra 1300fef2e7 Merge pull request #7116 from element-hq/renovate/zizmorcore-zizmor-action-0.x
Update zizmorcore/zizmor-action action to v0.5.7
2026-06-30 18:50:44 +02:00
renovate[bot] b1be66f26d Update dependency org.matrix.rustcomponents:sdk-android to v26.06.30 2026-06-30 16:39:34 +00:00
ganfra d4d8571087 Merge branch 'develop' into renovate/zizmorcore-zizmor-action-0.x 2026-06-30 18:38:30 +02:00