Releases: element-hq/element-x-android
Releases · element-hq/element-x-android
Element X Android v25.04.3
What's Changed
🙌 Improvements
🐛 Bugfixes
- Use in-call volume and mode for EC by @jmartinesp in #4481
- Send SVG images as files by @jmartinesp in #4595
- Fetch the initial ignored user list manually when subscribing by @jmartinesp in #4598
- Fix audio output selection for Element Call by @bmarty in #4602
- [a11y] Make more items focusable by @bmarty in #4605
- Fix ringing calls not stopping when the other user cancels the call by @jmartinesp in #4613
- Ensure that pinning an event makes the pinned messages banner appear by @bmarty in #4606
🗣 Translations
- Sync Strings by @ElementBot in #4590
- Sync Strings by @ElementBot in #4612
📄 Documentation
- Improve onboarding docs: by @jmartinesp in #4578
Dependency upgrades
- Upgrade Rust bindings to
v25.04.11
by @jmartinesp in #4580 - fix(deps): update dependency androidx.sqlite:sqlite-ktx to v2.5.0 by @renovate in #4568
- fix(deps): update dependency app.cash.molecule:molecule-runtime to v2.1.0 by @renovate in #4585
- fix(deps): update core to v1.16.0 by @renovate in #4564
- Upate datastore to 1.1.4 by @bmarty in #4551
- fix(deps): update media3 to v1.6.1 by @renovate in #4592
- chore(deps): update danger/danger-js action to v13 by @renovate in #4596
- fix(deps): update dependency io.element.android:emojibase-bindings to v1.4.2 by @renovate in #4591
- fix(deps): update dagger to v2.56.2 by @renovate in #4603
- fix(deps): update dependency io.sentry:sentry-android to v8.8.0 by @renovate in #4557
- fix(deps): update dependency androidx.compose:compose-bom to v2025.04.00 - autoclosed by @renovate in #4565
- fix(deps): update dependency com.posthog:posthog-android to v3.14.0 by @renovate in #4616
- fix(deps): update android.gradle.plugin to v8.9.2 by @renovate in #4615
- fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.4.22 by @renovate in #4622
Others
- Improve accessibility of the timeline by @jmartinesp in #4579
- Push: improve Push history screen, log and stored data by @bmarty in #4601
- Push gateway config by @bmarty in #4608
Full Changelog: v25.04.2...v25.04.3
v25.04.2
Changes in Element X v25.04.2
Security fixes 🔐
- Fix for GHSA-m5px-pwq3-4p5m / CVE-2025-27599
Full Changelog: v25.04.1...v25.04.2
Element X Android v25.04.1
What's Changed
✨ Features
🙌 Improvements
🐛 Bugfixes
Dependency upgrades
- fix(deps): update dependencyanalysis to v2.15.0 by @renovate in #4558
- fix(deps): update dependency io.mockk:mockk to v1.14.0 by @renovate in #4562
- fix(deps): update kotlin by @renovate in #4552
- fix(deps): update dependency org.maplibre.gl:android-sdk to v11.8.6 by @renovate in #4567
- fix(deps): update dependencyanalysis to v2.16.0 by @renovate in #4575
Full Changelog: v25.04.0...v25.04.1
Element X Android v25.04.0
What's Changed
✨ Features
- Enable Rust trace log packs by @jmartinesp in #4514
- Allow using a hardware keyboard to unlock the app using a pin code by @jmartinesp in #4530
🙌 Improvements
- Change (mention span) : rework and add more cases by @ganfra in #4476
- Add kick (remove) confirmation and reason by @bmarty in #4507
- Remove the green badge on a pending invite after a first preview by @bmarty in #4532
🐛 Bugfixes
- Improve touch indicators for the user info UI in the timeline by @jmartinesp in #4482
- Limit the text length in the 'in reply to' preview by @jmartinesp in #4491
- Timeline header: ensure that the decoration is clickable by @bmarty in #4495
- Add video autoplay to media gallery by @jmartinesp in #4499
- Add
WakeLock
to dismiss ringing call screen when call is cancelled by @jmartinesp in #4478 - Make sure the live timeline is destroyed before clearing a room's cache by @jmartinesp in #4515
- Fix bullet points not having leading margin on timeline items by @jmartinesp in #4536
- Fix the share location URI by @jmartinesp in #4544
- Add a inderminate progress bar when loging out and in Waiting state. by @bmarty in #4538
🗣 Translations
- Sync Strings by @ElementBot in #4506
- Sync Strings by @ElementBot in #4543
🧱 Build
- Element config by @bmarty in #4471
- Check if Manifest.permission.REQUEST_INSTALL_PACKAGES is in the manifest by @bmarty in #4490
- Remove nightly_enterprise.yml. by @bmarty in #4492
- Log the packageId which is currently built. by @bmarty in #4494
- Use handy buildConfigFieldStr. by @bmarty in #4501
- Fix warnings in InMemoryAppPreferencesStore by @bmarty in #4523
Dependency upgrades
- fix(deps): update camera to v1.4.2 by @renovate in #4483
- fix(deps): update dependency org.maplibre.gl:android-sdk to v11.8.5 by @renovate in #4487
- fix(deps): update dependency com.posthog:posthog-android to v3.13.0 by @renovate in #4469
- fix(deps): update dependency androidx.compose:compose-bom to v2025.03.01 by @renovate in #4484
- fix(deps): update dependencyanalysis to v2.13.3 by @renovate in #4493
- fix(deps): update media3 to v1.6.0 by @renovate in #4488
- fix(deps): update dependency io.element.android:element-call-embedded to v0.9.0 by @renovate in #4498
- fix(deps): update dependency com.google.firebase:firebase-bom to v33.12.0 by @renovate in #4508
- fix(deps): update dependency com.posthog:posthog-android to v3.13.1 by @renovate in #4516
- fix(deps): update dependency io.sentry:sentry-android to v8.6.0 by @renovate in #4509
- fix(deps): update kotlin by @renovate in #4444
- fix(deps): update kotlin by @renovate in #4522
- fix(deps): update dependencyanalysis to v2.14.0 by @renovate in #4527
- fix(deps): update dependency io.element.android:compound-android to v25.4.4 by @renovate in #4537
- chore(deps): update plugin dependencycheck to v12.1.1 by @renovate in #4540
- fix(deps): update appyx to v1.7.0 by @renovate in #4547
- fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.4.7 by @renovate in #4548
Others
- Update screenshots by @bmarty in #4497
- Update store description. by @bmarty in #4496
- Improve TextFieldDialog by @bmarty in #4512
- Make
RustMatrixClient.close
asynchronous by @jmartinesp in #4513 - Replace OutlinedTextField by our TextField by @bmarty in #4521
- Remove alias from room invite item by @bmarty in #4531
- Remember flows by @bmarty in #4533
- Use colors from compound for badges by @bmarty in #4545
- Update app icon by @bmarty in #4534
- Click on userId / room alias to copy value to clipboard. by @bmarty in #4549
- Run the 'prevent blocked' workflow even if PR has conflicts by @robintown in #4432
- Update wording for push provider support test. (#4079) by @bmarty in #4553
Full Changelog: v25.03.4...v25.04.0
Element X Android v25.03.4
What's Changed
🙌 Improvements
🧱 Build
- Fix flaky incoming verification tests by @jmartinesp in #4479
Dependency upgrades
- fix(deps): update dagger to v2.56.1 by @renovate in #4472
- fix(deps): update dependencyanalysis to v2.13.2 by @renovate in #4473
- Upgrade embedded EC version to
v0.9.0-rc.4
by @jmartinesp in #4489
Full Changelog: v25.03.3...v25.03.4
Element X Android v25.03.3
What's Changed
✨ Features
- Add 'unencrypted room' badges and labels by @jmartinesp in #4445
- Use embedded version of Element Call by @jmartinesp in #4470
🐛 Bugfixes
- Fix 'unverified session' flow displayed when creating account by @jmartinesp in #4467
🗣 Translations
- Sync Strings by @ElementBot in #4461
🧱 Build
Dependency upgrades
- chore(deps): update rnkdsh/action-upload-diawi action to v1.5.8 by @renovate in #4457
- chore(deps): update plugin licensee to v1.13.0 by @renovate in #4447
- fix(deps): update dependency org.maplibre.gl:android-sdk to v11.8.4 by @renovate in #4450
- fix(deps): update dependency com.google.firebase:firebase-bom to v33.11.0 by @renovate in #4448
- fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.3.24 by @renovate in #4394
- fix(deps): update dependencyanalysis to v2.13.1 by @renovate in #4464
- chore(deps): update plugin sonarqube to v6.1.0.5360 by @renovate in #4468
- fix(deps): update android.gradle.plugin to v8.9.1 by @renovate in #4465
Others
- Sync Strings - tweaks to identity change messages by @andybalaam in #4454
- Check link click by @bmarty in #4463
Full Changelog: v25.03.2...v25.03.3
Element X Android v25.03.2
What's Changed
✨ Features
- Implement user verification by @jmartinesp in #4294
- Add user verification and verification state violation badges by @jmartinesp in #4392
- Open txt document inside the application by @bmarty in #4414
- Add timeline item prefetching by @jmartinesp in #4399
🐛 Bugfixes
- fix(read receipt): track read receipts for focused timeline by @ganfra in #4374
- Discard timed out verification requests by @jmartinesp in #4385
- Ensure the snackbar "No more media to show" is not rendered when opening the media viewer. by @bmarty in #4397
- Disable click effect on Stickers by @bmarty in #4401
- Ensure that a click on a media open the correct media. by @bmarty in #4413
- Display user verification violation icon in DM rooms too by @jmartinesp in #4423
- Add a filter to avoid stack overflow when pressing the back button several times. by @bmarty in #4430
- Make verification screens scrollable and emoji labels multiline by @jmartinesp in #4449
🗣 Translations
- Sync Strings - New translations in Basque by @ElementBot in #4381
- Sync Strings by @ElementBot in #4421
🧱 Build
- More PR checks by @bmarty in #4384
- "Core Team" is a team of matrix-org. Use team "Vector Core" instead. by @bmarty in #4393
- Fix warnings in tests for push provider modules by @jmartinesp in #4398
- Update Gradle Wrapper from 8.12.1 to 8.13 by @ElementBot in #4308
- Revert agp to 8.8.1 by @bmarty in #4451
Dependency upgrades
- Update rnkdsh/action-upload-diawi action to v1.5.7 by @renovate in #4354
- fix(deps): update dependency com.posthog:posthog-android to v3.12.0 by @renovate in #4387
- fix(deps): update dependencyanalysis to v2.11.0 by @renovate in #4395
- fix(deps): update dependency androidx.compose:compose-bom to v2025.03.00 by @renovate in #4407
- fix(deps): update dependency androidx.webkit:webkit to v1.13.0 by @renovate in #4408
- fix(deps): update dependency net.java.dev.jna:jna to v5.17.0 by @renovate in #4419
- fix(deps): update dependencyanalysis to v2.12.0 by @renovate in #4409
- Add Google Tink dependency, replacing
androidx.security.crypto
by @jmartinesp in #4405 - fix(deps): update dependency io.sentry:sentry-android to v8.4.0 by @renovate in #4411
- fix(deps): update dependency org.maplibre.gl:android-sdk to v11.8.3 by @renovate in #4427
- chore(deps): update webfactory/ssh-agent action to v0.9.1 by @renovate in #4426
- fix(deps): update android.gradle.plugin to v8.9.0 by @renovate in #4320
- Update SDK version to
25.03.13
and fix breaking changes by @jmartinesp in #4406 - Update dagger to v2.56 by @renovate in #4440
- Update dependency io.sentry:sentry-android to v8.5.0 by @renovate in #4433
- Update dependencyAnalysis to v2.13.0 by @renovate in #4442
- Update dependency com.google.crypto.tink:tink-android to v1.17.0 by @renovate in #4422
- deps(rust sdk) : update to 25.03.20 and fix api change by @ganfra in #4452
Others
- Migrate some icons to Compound icon by @bmarty in #4375
- Long press link to copy URL to clipboard by @ShadowRZ in #4376
- Use public icon from Compound by @bmarty in #4386
- Be able to correctly render the UI with other colors. by @bmarty in #4378
- Let EnterpriseService provides push gateways by @bmarty in #4400
- Add feature flag to let the application prints logs to logcat in release builds. by @jmartinesp in #4402
- Hide "unencrypted" lock for redacted messages by @Xant3s in #4410
- Hide unencrypted lock for redacted msgs by @bmarty in #4429
- Clear SDK cache properly by @bmarty in #4396
New Contributors
Full Changelog: v25.03.1...v25.03.2
Element X Android v25.03.1
What's Changed
✨ Features
🙌 Improvements
- change(create room) : use history visibility "invited" by @ganfra in #4335
- change(room directory) : move the the room directory entry by @ganfra in #4348
- [Change] Invited state room preview by @ganfra in #4353
- change(left room snackbar) : manage cancel knock and decline invite by @ganfra in #4360
🐛 Bugfixes
- Restore manual
Client
cleanup on session logout by @jmartinesp in #4333
🗣 Translations
- Sync Strings by @ElementBot in #4346
🧱 Build
Dependency upgrades
- chore(deps): update plugin ktlint to v12.2.0 by @renovate in #4338
- fix(deps): update dependency org.maplibre.gl:android-sdk to v11.8.2 by @renovate in #4340
- fix(deps): update dependency io.mockk:mockk to v1.13.17 by @renovate in #4334
- fix(deps): update kotlin to v2.1.10-1.0.31 by @renovate in #4337
- fix(deps): update dependency com.google.firebase:firebase-bom to v33.10.0 by @renovate in #4339
- Migrate to coil3 by @bmarty in #4347
- fix(deps): update dependency org.jsoup:jsoup to v1.19.1 by @renovate in #4351
- deps(rust sdk) : update to 25.03.05 by @ganfra in #4370
- Update dependency org.matrix.rustcomponents:sdk-android to v25.3.6 by @renovate in #4371
Others
- Prevent PRs with the X-Blocked label from being merged by @robintown in #4350
- Fix some icon colors by @bmarty in #4365
- Remove PreferenceText, replace by ListItem. by @bmarty in #4369
- Show error screens in group calls by @robintown in #4297
New Contributors
- @robintown made their first contribution in #4350
Full Changelog: v25.03.0...v25.03.1
Element X Android v25.03.0
What's Changed
✨ Features
- Create
SyncOrchestrator
by @jmartinesp in #4176 - feature(crypto): verification violation handling and block sending by @BillCarsonFr in #4126
- Update Matrix Room API and allow media swipe on pinned event only. by @bmarty in #4274
- Feature : join room by address by @ganfra in #4302
🙌 Improvements
🐛 Bugfixes
- SyncOrchestrator: restore the initial sync step by @jmartinesp in #4242
- When an emoji is used as the 'initial' for an avatar, use the whole emoji by @jmartinesp in #4277
- Try avoiding trailing punctuation inside linkified URLs by @jmartinesp in #4214
- Preload account urls by @bmarty in #4301
- Fix issues due to multiple ntfy applications with the same name. by @bmarty in #4312
- Use
Settings.System.DEFAULT_RINGTONE_URI
for ringing notifications by @jmartinesp in #4310
🗣 Translations
- Sync Strings - New translations to turkish by @ElementBot in #4253
- Sync Strings by @ElementBot in #4298
🧱 Build
- Fix nightly reports by @bmarty in #4235
- Fix nightly reports - next step by @bmarty in #4239
- Prepare application for being configurable by @bmarty in #4285
- runQualityChecks task shouldn't fail fast by @jmartinesp in #4309
- Get library ComposablePreviewScanner from maven and update to the latest version by @bmarty in #4327
Dependency upgrades
- Update dependency com.posthog:posthog-android to v3.11.2 by @renovate in #4230
- Update dependency org.matrix.rustcomponents:sdk-android to v0.2.78 by @renovate in #4234
- Update dependency org.maplibre.gl:android-sdk to v11.8.1 by @renovate in #4245
- fix(deps): update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.6.2 by @renovate in #4258
- fix(deps): update dependency io.sentry:sentry-android to v8.2.0 by @renovate in #4262
- fix(deps): update telephoto to v0.15.1 by @renovate in #4270
- fix(deps): update dependency com.google.firebase:firebase-bom to v33.9.0 by @renovate in #4249
- chore(deps): update danger/danger-js action to v12.3.4 by @renovate in #4259
- fix(deps): update android.gradle.plugin to v8.8.1 by @renovate in #4263
- chore(deps): update plugin dependencycheck to v12.1.0 by @renovate in #4272
- fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25 by @renovate in #4273
- fix(deps): update dependency androidx.compose:compose-bom to v2025.02.00 by @renovate in #4261
- fix(deps): update kotlin to v2.1.10-1.0.30 by @renovate in #4265
- fix(deps): update dependency io.github.zxing-cpp:android to v2.3.0 by @renovate in #4282
- fix(deps): update firebaseappdistribution to v5.1.1 by @renovate in #4246
- fix(deps): update dependencyanalysis to v2.8.2 by @renovate in #4251
- fix(deps): update dependency com.google.accompanist:accompanist-permissions to v0.37.1 by @renovate in #4283
- fix(deps): update dependency com.google.accompanist:accompanist-permissions to v0.37.2 by @renovate in #4287
- fix(deps): update dependencyanalysis to v2.10.0 by @renovate in #4288
- fix(deps): update dependencyanalysis to v2.10.1 by @renovate in #4295
- Upgrade SDK version to 25.02.26 by @jmartinesp in #4305
- fix(deps): update kotlinpoet to v2.1.0 by @renovate in #4304
- Update compound by @bmarty in #4319
- fix(deps): update dependency androidx.constraintlayout:constraintlayout-compose to v1.1.1 by @renovate in #4324
- fix(deps): update activity to v1.10.1 by @renovate in #4321
- fix(deps): update dependency androidx.exifinterface:exifinterface to v1.4.0 - autoclosed by @renovate in #4325
- fix(deps): update dependency androidx.constraintlayout:constraintlayout to v2.2.1 by @renovate in #4322
- fix(deps): update dependency io.sentry:sentry-android to v8.3.0 by @renovate in #4316
- fix(deps): update dependency com.posthog:posthog-android to v3.11.3 by @renovate in #4313
- fix(deps): update dependency com.android.tools:desugar_jdk_libs to v2.1.5 by @renovate in #4299
- chore(deps): update plugin detekt to v1.23.8 by @renovate in #4292
Others
- Update incoming call notification content to "📹 Incoming call" by @bmarty in #4231
- Display a bottom sheet to let user confirm the DM creation by @bmarty in #4233
- Open chat links in regular browser tabs by @cbs228 in #4198
- Theme override by @bmarty in #4226
- Allow user certificate in production builds. by @bmarty in #4275
- Replace Material icons with Compound icons wherever it's possible by @bmarty in #4323
New Contributors
Full Changelog: v25.02.0...v25.03.0
Element X Android v25.02.0
What's Changed
✨ Features
- Media navigation with swipe gesture by @bmarty in #4161
- Add ability to swipe between media when opened from the timeline. by @bmarty in #4205
🙌 Improvements
- change(design) : use ElementTheme.typography.fontBodyLgMedium by @ganfra in #4145
- change(design) : New component Announcement by @ganfra in #4140
- update rust sdk 0.2.75 by @ganfra in #4158
🐛 Bugfixes
- Fix dm avatar rtl by @bmarty in #4103
- Unified push gateway resolver improvement by @bmarty in #4101
- Close the media preview screen ASAP with sending queue enabled by @jmartinesp in #4089
- fix(coroutine) : make sure to switch coroutine context by @ganfra in #4146
- Fix snack bar not displayed in MediaViewer by @bmarty in #4195
- Let the SDK provide the "network is available information" by @bmarty in #4215
🗣 Translations
- Sync Strings by @ElementBot in #4088
- Sync Strings by @ElementBot in #4100
- Sync Strings by @ElementBot in #4114
- Fix import of en-US translations. by @bmarty in #4135
- Sync Strings by @ElementBot in #4139
- Sync Strings by @ElementBot in #4172
- Sync Strings by @ElementBot in #4199
- Sync Strings - new (partial) language: Norwegian by @ElementBot in #4227
🧱 Build
- Update Gradle Wrapper from 8.11.1 to 8.12 by @ElementBot in #4085
- Test using Maestro CLI + emulator instead of Cloud by @jmartinesp in #4092
- Make Maestro run for each PR push by @jmartinesp in #4121
- Migrate to CalVer like versioning by @bmarty in #4187
- Kover: include back :libraries:matrix:impl module. by @bmarty in #4193
- Update Gradle Wrapper from 8.12 to 8.12.1 by @ElementBot in #4196
- Use secret Sentry DSN value by @jmartinesp in #4210
- Use Sentry breadcrumbs instead of logging new events by @jmartinesp in #4223
🚧 In development 🚧
- Media Viewer: show snackbar when reaching end of timeline. by @bmarty in #4201
- Feature : room settings - security and privacy by @ganfra in #4212
Dependency upgrades
- Update dependency io.mockk:mockk to v1.13.14 by @renovate in #4083
- Update dependency net.java.dev.jna:jna to v5.16.0 by @renovate in #4087
- Update kotlin to v1.10.1 by @renovate in #4073
- Update dagger to v2.54 by @renovate in #4084
- Update dependency io.sentry:sentry-android to v7.19.1 by @renovate in #4090
- Update dependency com.android.tools:desugar_jdk_libs to v2.1.4 by @renovate in #4077
- Update dependency com.posthog:posthog-android to v3.10.0 by @renovate in #4120
- Update appyx to v1.6.0 by @renovate in #4129
- Update dagger to v2.55 by @renovate in #4131
- Update android.gradle.plugin to v8.8.0 by @renovate in #4130
- Update dependency org.maplibre.gl:android-sdk to v11.8.0 by @renovate in #4132
- Update dependency io.mockk:mockk to v1.13.16 by @renovate in #4134
- Update dependencyAnalysis to v2.7.0 by @renovate in #4136
- Update anvil to v0.4.1 by @renovate in #4144
- Update kotlin by @renovate in #4117
- Update plugin dependencycheck to v12 by @renovate in #4137
- Update dependency io.sentry:sentry-android to v7.20.0 by @renovate in #4107
- Update wysiwyg to v2.38.0 by @renovate in #4104
- Update dependency androidx.recyclerview:recyclerview to v1.4.0 by @renovate in #4154
- Update activity to v1.10.0 by @renovate in #4152
- Update firebaseAppDistribution to v5.1.0 by @renovate in #4159
- Update dependency com.google.firebase:firebase-bom to v33.8.0 by @renovate in #4160
- Update dependency androidx.compose:compose-bom to v2025 by @renovate in #4155
- Update dependency io.sentry:sentry-android to v7.20.1 by @renovate in #4178
- Update dependency io.sentry:sentry-android to v8 by @renovate in #4180
- Update wysiwyg to v2.38.1 by @renovate in #4177
- Update dependency org.matrix.rustcomponents:sdk-android to v0.2.76 by @renovate in #4183
- Update wysiwyg to v2.38.2 by @renovate in #4186
- Update dependency com.posthog:posthog-android to v3.11.0 by @renovate in #4204
- Update kotlin by @renovate in #4200
- Update dependency org.matrix.rustcomponents:sdk-android to v0.2.77 by @renovate in #4228
- Update dependency com.posthog:posthog-android to v3.11.1 by @renovate in #4222
- Update dependency io.element.android:emojibase-bindings to v1.3.4 by @renovate in #4213
- Update dependencyAnalysis to v2.8.0 by @renovate in #4218
- Update dependency androidx.compose:compose-bom to v2025.01.01 by @renovate in #4217
- Update dependency io.sentry:sentry-android to v8.1.0 by @renovate in #4221
- Update rnkdsh/action-upload-diawi action to v1.5.6 by @renovate in #4173
- Update plugin dependencycheck to v12.0.2 by @renovate in #4170
Others
- Improve gallery loading state by @bmarty in #4080
- Show more detail about the error when pusher registration fails. by @bmarty in #4081
- Update pull request template and CI automation by @bmarty in #4037
- Add a log function for handling complex values to the WebView client. by @Half-Shot in #4098
- design : CounterAtom by @ganfra in #4108
- Change sticker mimetype fallback to image by @surakin in #4111
- Dual licensing: AGPL + Element Commercial by @bmarty in #4118
- Replace the InfoListOrganism default bg color by @jmartinesp in #4091
- Ignore dependency that are not third-party licenses to us. by @bmarty in #4122
- misc(send queue) : do not disable send queue when Network is Offline by @ganfra in #4105
- Remove or replace unnecessary
BackHandler
calls by @jmartinesp in #4148 - Replace our firstIfSingle extension with singleOrNull from the Kotlin library by @bmarty in #4184
- Remove log. by @bmarty in #4203
- Remove unused types / code. by @bmarty in #4185
- Consider that the topic of a room has been removed when it's blank. by @bmart...