What's Changed
🏗️ Features
- feat(logging): Replace Timber with Kermit for multiplatform logging by @jamesarich in #4083
- Consider hopStart=0 when calculating hops for packets by @esev in #4101
- Convert Room DAO methods to suspend functions by @romansl in #4102
- feat: add retention period to meshLog. Defaults to 7 days, with a settings dropdown to change by @mdecourcy in #4078
- Fix: Use dynamic year for copyright headers by @jamesarich in #4116
- feat: auto retry text message send on max retransmit by @mdecourcy in #4124
- feat: Add separate notifications for waypoints by @jamesarich in #4131
- feat: Enhance message notifications with history and actions by @jamesarich in #4133
- feat: Add initial handling for Store and Forward PlusPlus packets by @jamesarich in #4136
- feat: Add acknowledgement status and retry for emoji reactions by @jamesarich in #4142
- feat: Mute broadcast Reaction notifications by default by @jamesarich in #4159
- feat: Add SFPP confirmed status to Messages and Reactions by @jamesarich in #4139
- feat(i18n): Add string for PKI public key send failure by @jamesarich in #4165
- feat: Handle Store and Forward heartbeat packets by @jamesarich in #4168
- refactor(build): centralize Dokka documentation generation by @jamesarich in #4171
- Dedup repeat messages/reactions due to sfpp by @mdecourcy in #4174
- feat: Add mute node functionality by @jamesarich in #4181
- feat: Add
forceEnableAlltoCapabilitiesby @jamesarich in #4184 - feat(messaging): Overhaul message bubbles and add actions by @jamesarich in #4206
- Refactor: Improve MessageItem layout and styling by @jamesarich in #4208
- refactor(messaging): Redesign message bubbles and reaction UI by @jamesarich in #4217
- feat: Add ESP32 Unified OTA update support by @jamesarich in #4095
- feat: Add Client Base role strings by @jamesarich in #4227
- feat: Localize traceroute strings by @jamesarich in #4228
- feat: retry message/reaction dialog by @mdecourcy in #4195
- refactor: Enable test coverage and update CI by @jamesarich in #4233
- feat(service): Overhaul MeshServiceExample by @jamesarich in #4263
- feat(test): Add comprehensive unit and instrumentation tests by @jamesarich in #4260
🛠️Fixes
- refactor: Migrate to Android Gradle Plugin 9.0 by @jamesarich in #4072
- feat: Refactor back navigation in adaptive screens by @jamesarich in #4085
- fix: update schema 27 with packet index by @mdecourcy in #4086
- feat: Improve POSIX time zone string generation by @jamesarich in #4087
- feat(build): Set JVM toolchain to 21 by @jamesarich in #4090
- feat: Refactor MeshService into smaller, single-responsibility components by @jamesarich in #4108
- Refactor: Improve analytics plugin application and task configuration by @jamesarich in #4120
- fix: Update copyright year to 2026 by @jamesarich in #4121
- feat: Send emoji codepoint in reaction packets by @jamesarich in #4123
- feat: Improve node handling and add client notifications by @jamesarich in #4130
- fix: reaction display regression by @jamesarich in #4141
- refactor: use location compat by @jamesarich in #4143
- fix: fix strings.xml by @jamesarich in #4147
- fix: Make node details selectable by @jamesarich in #4151
- refactor(datetime): Standardize date/time formatting with
DateUtilsby @jamesarich in #4164 - refactor(deps): inject CoroutineDispatchers by @jamesarich in #4170
- refactor(build): Centralize Dokka configuration into convention plugin by @jamesarich in #4173
- fix(meshlog): Change default retention to 30 days by @jamesarich in #4177
- feat: Add "now" string and update formatAgo function by @jamesarich in #4183
- fix #4150: display
0°Cinstead of-0°Cfor near-zero negative temperatures by @lohwasser in #4186 - fix(deps): resolve faraday-multipart ruby 4 incompatibility by @jamesarich in #4199
- Revert "fix(deps): resolve faraday-multipart ruby 4 incompatibility" by @jamesarich in #4200
- Revert "chore(deps): update ruby to v4" by @jamesarich in #4201
- feat(connections): Improve connection screen UI and logic by @jamesarich in #4224
- ci(actions): Set up JDK 21 in scheduled-updates workflow by @jamesarich in #4236
- ci: Run tests and generate coverage for all modules by @jamesarich in #4238
- Revert "ci: Run tests and generate coverage for all modules" by @jamesarich in #4240
- fix(ci): Run tests for both F-Droid and Google flavors by @jamesarich in #4239
- feat(firmware): Use pio_env to select correct firmware variant by @jamesarich in #4244
- ci: fix coverage report paths and improve test result inclusivity by @jamesarich in #4245
- refactor(ui): Improve EmojiPicker layout constraints by @jamesarich in #4250
- refactor: Use device address to manage service lifecycle by @jamesarich in #4251
- fix(node): Correct owner ID and local user detection by @jamesarich in #4256
- Display traceroutes with 0 hops by @esev in #4261
New Contributors
- @esev made their first contribution in #4101
- @romansl made their first contribution in #4102
- @lohwasser made their first contribution in #4186
Full Changelog: v2.7.10...v2.7.11-closed.1