New features
Follow redirects when adding webdav mount by @sunkup in #1582
Icons next to CalDAV/CardDAV tab titles by @ArnyminerZ in #1599
Bug fixes
[Sync framework] Fix sync always pending on Android 14+ by @sunkup in #1463
Use early entry point for sync adapter services by @rfc2822 in #1610
AndroidSyncFrameworkTest: allow optional states by @rfc2822 in #1625
Correctly handle SecurityException for acquireContentProvider by @ArnyminerZ in #1622
Fix ETag update logic in QueryChildDocumentsOperation by @rfc2822 in #1626
Refactoring
Update synctools for AndroidEvent2 by @rfc2822 in #1601
[UI] Use "(optional)" in labels to indicate optional textfields by @sunkup in #1571
Extract discoverHomesets() to ServiceRefresher by @sunkup in #1604
Choose real or fake (for tests) SyncAdapter over DI by @rfc2822 in #1608
Extract refreshHomesetsAndTheirCollections to HomeSetRefresher by @sunkup in #1606
[WebDAV] Implement command pattern, streamline lifecycle, remove WebdavScope by @rfc2822 in #1617
WebDAV: remove notifications, timeout logic by @rfc2822 in #1630
Replaced Webcal tab icon in collections list by @ArnyminerZ in #1628
Other changes
Extract refreshPrincipals() to PrincipalsRefresher by @sunkup in #1607
Update dependencies, including AGP by @rfc2822 in #1632
Version bump to 4.5.3 by @ArnyminerZ in #1637
Fetch translations from Transifex by