Releases: bitfireAT/davx5-ose
v4.5.4-ose
What's Changed
New features
- Change "Account doesn't exist" toast message to "Account has been removed" for deleting accounts by @ArnyminerZ in #1650
- Using new suggested icons for tabs by @ArnyminerZ in #1657
Bug fixes
- Fix bottom bar color on custom tabs by @ArnyminerZ in #1640
- Make "sync pending" work in AccountsScreen and AccountScreen by @rfc2822 in #1615
- [Sync Framework] Android 14+: Cancel forever pending address book account syncs by @sunkup in #1643
- Fix NPE when
Event._ID
is larger thanInteger.MAX_VALUE
by @rfc2822 in #1661 - Don't disable sync-ability of address books when set to manual only by @sunkup in #1662
- Handle null cases for
Events.DIRTY
by @ArnyminerZ in #1663 - Disable pending sync indicator on Android 14+ by @sunkup in #1689
- Fix KotlinNotImplementedError in LocalGroup update method by @rfc2822 in #1696
- Update synctools to fix #1701 by @rfc2822 in #1702
Refactoring
- Rename CollectionListRefresher to CollectionsWithoutHomeSetRefresher by @sunkup in #1644
- Update synctools for events as
Entity
andEventAndExceptions
by @rfc2822 in #1605
Dependencies
- [CI] Bump actions/checkout from 4 to 5 by @dependabot[bot] in #1664
- [CI] Bump actions/setup-java from 4 to 5 by @dependabot[bot] in #1672
- Bump the lib-dependencies group across 1 directory with 9 updates by @dependabot[bot] in #1695
Other changes
- Update to Gradle 9.0 by @rfc2822 in #1647
- Update dependencies to latest versions (including AGP) by @rfc2822 in #1665
- Add groups section to dependabot configuration by @rfc2822 in #1677
- Add comments on foreign key constraint enforcement by @sunkup in #1675
- Update synctools by @rfc2822 in #1690
- Configure Dependabot for Gradle dependencies by @rfc2822 in #1680
Full Changelog: v4.5.3-ose...v4.5.4-ose
v4.5.3-ose
What's Changed
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
foracquireContentProvider
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()
toServiceRefresher
by @sunkup in #1604 - Choose real or fake (for tests) SyncAdapter over DI by @rfc2822 in #1608
- Extract
refreshHomesetsAndTheirCollections
toHomeSetRefresher
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()
toPrincipalsRefresher
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 @ArnyminerZ in #1638
Full Changelog: v4.5.2.1-ose...v4.5.3-ose
v4.5.2.1-ose
v4.5.2-ose
What's Changed
Bug fixes
- [Sync framework] Disable contacts content change triggered syncs if sync interval set to manual only by @sunkup in #1569
Refactoring
- AndroidCalendar refactoring by @rfc2822 in #1560
- Synctools: AndroidEvent companion object moved by @rfc2822 in #1572
- [synctools] Use
EventReader
/EventWriter
by @rfc2822 in #1573 - Move external URIs from Constants to ExternalUris object by @rfc2822 in #1574
- Move SyncState to resource package because it's not in the database by @rfc2822 in #1585
- Move Insert/update to DAO by @rfc2822 in #1587
- Fix exceptions being fetched as
Parcelable
instead ofSerializable
inDebugInfoActivity
by @ArnyminerZ in #1597
Other changes
- Use system defined line separator by @mbiebl in #1562
- Sync davx5 / davx5-ose repos by @rfc2822 in #1575
- Update cert4android to get 16 kB page size support over Conscrypt 2.5.3 by @rfc2822 in #1581
- Update dependencies, including dav4jvm that updates okhttp to 5.x by @rfc2822 in #1593
Full Changelog: v4.5.1-ose...v4.5.2-ose
v4.5.1-ose
What's Changed
New features
- Improve IME integration on forms by @ArnyminerZ in #1504
- [Google] Remove warning box on login screen by @sunkup in #1548
Bug fixes
- Update sync progress bar when pending in SAF by @sunkup in #1445
- OAuth: Synchronize access token generation by @rfc2822 in #1547
Refactoring
- Update synctools and use unified BatchOperation by @rfc2822 in #1543
- Don't subclass AndroidEvent / AndroidCalendar populate / build methods anymore by @rfc2822 in #1544
- Set iCalendar PRODID in Constants and use it in respective classes by @rfc2822 in #1550
- LocalEvent: don't subclass AndroidEvent by @rfc2822 in #1551
LocalCalendar
: don't subclassAndroidCalendar
by @rfc2822 in #1552Update to synctools version that uses explicit parsing / splitting by @rfc2822 in #1554
Other changes
Full Changelog: v4.5-ose...v4.5.1-ose
v4.5-ose
Video announcement and short tutorial
Announcement video: https://www.youtube.com/watch?v=3TWb5U6pPYg
YT Shorts version: https://www.youtube.com/shorts/fWhaLgcrcvI
Tutorial for Nextcloud: https://www.youtube.com/watch?v=Ppvt1TS8VVA
What is Push and why do I need it?
TLDR;
Get updates for your contacts/events/tasks/notes instantly on your mobile device instead of polling the server in regular intervals like once an hour.
Requirements:
- DAVx5: minimal version DAVx5 4.5 (released June 2025)
- FCM (pre-installed on devices with Google Play Store) or any UnifiedPush distributor app (ntfy, Conversations, the NextPush app for Android, Mozillas Sunup, etc).
- The server must support WebDAV Push.
More Details
WebDAV Push is a very new addition to the WebDAV ecosystem and extends the WebDAV Standard with the ability to make synchronization in near-realtime. So if a file on the WebDAV server is added, changed or deleted you will receive this instantly also on your mobile devices via DAVx5.
This is especially useful for Contacts, Events and Tasks all of which DAVx5 offers synchronization for. Whenever a resource on the server changes (be it from directly changing it or if the change is being made from another device) you should get this update within a few seconds depending on network and server speed.
How-to-use in 5 steps (watch the video):
- Install and activate the servers WebDAV Push extension (for example the Nextcloud dav_push app in your Nextcloud App center – minimal version 0.0.3)
- If you add a new account, continue with step 3. If already have an existing DAVx5 account:
- refresh the collection list in the CalDAV/CardDAV tabs to receive the new information that the server supports WebDAV Push and check in the details view of a collection if you see either a "Server announces Push support" or "Subscribed message with a date".
- If you add a fresh DAVx5 account, the capability of Push will be detected during setup.
- Choose or Change the Push distributor in the DAVx5 settings at the very bottom.
- To test it, add an event, contact or task on the server side and open your respective Contacts / Calendars / Tasks app on Android. You should get the change within 5 – 60 seconds (depending on network speed)
Resources for server developers:
In order to provide your users with the ability to real-time sync data from your server you can implement the WebDAV Push draft. Although it is still a draft this solution already is working in the public. You can see an implementation for example on Nextcloud where this is being solved via an app plugin that can be activated upon a users wish.
See also UnifiedPush 3: https://unifiedpush.org/ and https://codeberg.org/UnifiedPush
What's Changed since 4.4.11
New features
- Add app password hint under password field by @sunkup in #1507
- Support Fastmail OAuth by @rfc2822 in #1509
- Support OAuth re-authorization by @rfc2822 in #1521
Bug fixes
- Fix edge to edge issue by @ArnyminerZ in #1515
- Delete local collection if missing remotely at delete request by @sunkup in #1512
Refactoring
- Credentials / dav4jvm: store passwords as CharArray by @rfc2822 in #1483
- [Lint] Convert URIs to strings using
toUri()
by @rfc2822 in #1506 - Pass state to modal drawer for automatic back handler by @ArnyminerZ in #1495
- [SyncManager]s Remove authority by @sunkup in #1491
- Increase SDK to 36 by @ArnyminerZ in #1513
Other changes
- Replace ical4android and vcard4android with synctools by @rfc2822 in #1519
- Redact Authorization header from HTTP requests by @mbiebl in #1520
- Intro / battery optimizations warning: remove Samsung; change wording from "probably" to "may" by @rfc2822 in #1532
- UnknownHostException by @rfc2822 in #1535
Full Changelog: v4.4.11-ose...v4.5-ose
v4.4.11-ose
What's Changed
New features
- Added warning about credentials in debug info by @ArnyminerZ in #1457
- Added widget with just a sync icon by @ArnyminerZ in #1340
Bug fixes
- [Push] Display FCM instead of DAVx⁵ in distributor settings by @ArnyminerZ in #1468
- SyncManager: directly wrap HTTP calls with
runInterruptible
by @rfc2822 in #1472 - Reset subscription URLs on distributor change by @sunkup in #1467
- [Push] Append sync when already syncing by @sunkup in #1480
- Implemented sort order for DAV documents by @ArnyminerZ in #1434
- Handle when AccountActivity is started without account by @sunkup in #1481
- TaskSyncer: accept nullable ResyncType by @rfc2822 in #1487
Refactoring
- Simplify running suspending tests by @rfc2822 in #1452
- Make SyncManager suspending (first part) by @rfc2822 in #1451
- [Sync] Replace
extras
Bundle by explicit arguments by @rfc2822 in #1475 - [CI] Run tests on pull requests instead of git pushes by @rfc2822 in #1479
Other changes
- Always append one-time syncs by @rfc2822 in #1482
- Use lowercase GroupIDs as a workaround for jitpack.io issues by @mbiebl in #1489
Full Changelog: v4.4.10-ose...v4.4.11-ose
v4.4.10-ose
What's Changed
New features
- Sync after sync flag or forceReadOnly flag of a collection are changed by @sunkup in #1383
- [Push] Support UnifiedPush Connector 3.x, VAPID, Encryption, Google FCM by @ArnyminerZ in #1325
- [Push] Better title/description for Google FCM in UI by @ArnyminerZ in #1424
- Send Push-Dont-Notify header by @sunkup in #1444
Bug fixes
- Hide "keep permissions" in API 29 and below by @ArnyminerZ in #1400
- NPE when trying to log in without specifying an email by @ArnyminerZ in #1401
- Fix non-suspending DB access on main thread in
accountRepository.delete()
by @rfc2822 in #1409 - [Push] Fix various subscription problems by @rfc2822 in #1411
- Upgrade about libs to 12.1.0 by @ArnyminerZ in #1416
- Fix UnifiedPushService tests by @rfc2822 in #1420
Refactoring
- Use ProGuard rules from libraries by @rfc2822 in #1387
- Use R8 full mode by @rfc2822 in #1397
- Test coroutines with
runTest
instead ofrunBlocking
by @rfc2822 in #1399 - Update AboutLibraries to 12.0.0 by @ArnyminerZ in #1406
- [WebDAV] Refactor coroutine usage by @rfc2822 in #1405
- Drop LiveData by @rfc2822 in #1414
- [Push] Don't block main thread in UnifiedPushService by @rfc2822 in #1412
- [Push] Update subscriptions when collection is (un)selected for sync by @sunkup in #1407
- Clean up app/build.gradle by @rfc2822 in #1421
- Repositories: apply new naming scheme by @rfc2822 in #1423
- Fixed deprecations with menu anchors by @ArnyminerZ in #1428
- Use ical4android that removes ClassLoader checks; refactor SyncDispatcher by @rfc2822 in #1446
Full Changelog: v4.4.9-ose...v4.4.10-ose
v4.4.9-ose
What's Changed
New features
Bug fixes
- Original string for webdav_add_mount_empty_more_info broken by @ArnyminerZ in #1354
- Debug Info does not contain actual error by @ArnyminerZ in #1362
- Avoid NPE when missing
DTSTART
for recurring events by @ArnyminerZ in #1336 - Fixed paddings on horizontal mode by @ArnyminerZ in #1353
- Fix 4.4.9 release compile error by @rfc2822 in #1386
Refactoring
Other changes
- Enable dependabot for Github Actions by @rfc2822 in #1363
- Update dependencies, including dav4jvm by @rfc2822 in #1374
- Update Screenshots by @devvv4ever in #1380
Full Changelog: v4.4.8-ose...v4.4.9-ose
v4.4.8-ose
What's Changed
New features
- Added confirmation dialog for "Distrust System Certificates" by @ArnyminerZ in #1307
- Added timestamp to debug info by @ArnyminerZ in #1323
- Show a notification at sync when ContentProvider inaccessible by @sunkup in #1278
Bug fixes
- SyncAdapter: Hilt error handling by @rfc2822 in #1299
- Add syncActive flag to control SyncAdapter behavior during tests by @rfc2822 in #1302
- Skip login type selection when logging in via intent by @sunkup in #1267
DnsRecordResolverTest
: Use seeded random number generator for deterministic test result by @sunkup in #1306- Remove special chars in address book account names by @sunkup in #1334
- Track app foreground state via AppTheme using separate object by @sunkup in #1335
Refactoring
- Refactor: replace deprecated getShowOnlyPersonalPair method and simplify removeAccount logic by @rfc2822 in #1304
- Use
TaskStackBuilder
instead ofPendingIntent.getActivity
by @ArnyminerZ in #1293 - Provide test address books via DI by @sunkup in #1310
Full Changelog: v4.4.7-ose...v4.4.8-ose