Releases: bolausson/sync-for-proton
Release list
v1.10.54 - Sync for Proton
The first full release since 1.9.6. It gathers up everything from the 1.10 pre-releases, so it is a big update.
New
- Contact filter rules. Decide which Proton contacts reach this phone and which phone contacts go to Proton, using ready made templates or your own rules, applied in the order you set. A test run names every affected contact before you save.
- Contacts your rules exclude are only taken off the phone after you confirm it, you can keep any of them, and they are never removed from your Proton account.
- Adding an account now asks what to sync. Nothing is copied to the phone until you choose.
- Turning contacts or calendar sync off offers to remove what is already on the phone. Nothing in your Proton account is touched, and turning it back on restores everything.
- Choose where a Proton contact that has only a display name is filed on the phone, so Android stops splitting an email address into a first and last name.
- A check that finds contacts whose first and last name an earlier version of the app invented from their email address, lists them by name, and removes just those names when you ask.
- The app's local sync database is now encrypted on your device.
- Logs can be saved to a file, for phones where the usual diagnostics are not available.
Contacts
- Editing a contact on your phone no longer strips their pinned encryption key and per address encryption settings from Proton.
- Editing a contact no longer wipes details this app cannot show, such as instant messaging handles, gender or a time zone you typed into Proton.
- Editing a contact no longer shortens the name Proton holds, so a title, a middle name or a second surname survives instead of being replaced by the two part name Android shows.
- The app no longer sends Proton a first and last name that Android invented by splitting an email address.
- A contact is never uploaded unencrypted when signing or encryption fails. It is held back and retried instead.
- A contact edit that could not be uploaded is kept and retried rather than thrown away.
- Correcting only the capitalisation of a contact's name is no longer undone on the next sync.
Calendar
- Creating, editing or deleting an event on a calendar Proton will not let you write to no longer fails and retries on every sync forever. The event stays on your phone, and a notification names the event, the calendar and the reason Proton gave.
- A calendar shared with you as view only now shows as read only, so your calendar app no longer offers to add events to it that Proton would never accept.
- Removing synced calendars no longer deletes events you created on the phone that had never reached Proton, since those exist nowhere else.
- Removing a calendar that holds a repeating event with a cancelled occurrence no longer leaves an empty calendar behind.
- A calendar sync that fails now says what actually went wrong instead of reporting an unexpected error, and a run that fetched nothing no longer reports itself as completed.
Backups
- Restoring a backup over an account you already had no longer deletes that account's calendar events from Proton itself.
- Backups now include your event reminders. Every backup written before this one contained none, so restoring one lost every alert you had set.
- One contact the app cannot write out no longer fails the whole backup, so your other contacts and all your calendars are still saved.
- Encrypted backups can no longer be written with a password the app could not read back, which produced archives that could never be opened. That failure is now reported instead of passing silently.
- A backup that could not fetch everything is reported as incomplete instead of claiming success, and can no longer push a complete backup out of your retention window.
- Backup files are written correctly. Each event used to carry its identifier several times over, which is invalid and strict importers can reject, and your timezone is now named as you set it rather than renamed to a nearby city.
- Restoring no longer switches a sync type back on that you had deliberately turned off, and it now restores your sync switches, chosen app language, logging settings and backup schedule.
- A backup you start yourself now appears in the diagnostic report.
Sync schedule and sign in
- "Manual only" no longer keeps syncing in the background. A phone already stuck in that state repairs itself the next time the app starts.
- The schedule you choose now applies to the background sync as well, instead of it keeping to its own hourly cycle.
- Signing in again after your session expires is no longer treated as adding a new account, so you are not asked to name an account you already have and cannot end up with a second copy of it while the first stops syncing.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.54 (versionCode 110054), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.10.53 (pre-release)
Fixes calendars that Proton will not let you write to.
- Fixed a calendar shared with you read-only appearing as editable, so your calendar app no longer offers to add events to it that could never be saved.
- Fixed an event Proton refuses retrying on every sync forever.
- Fixed a sync failing with no reason given when an event could not be saved.
- Fixed deleting an event on a read-only calendar retrying forever.
- Events Proton will not accept are now kept on your phone and listed in a notification naming the event and the calendar.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.53 (versionCode 110053), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.10.52 (pre-release)
Fixes the sync schedule setting properly. v1.10.50 fixed it for new choices only, and left phones that were already affected still syncing.
- Fixed "Manual only" continuing to sync in the background. Updating now repairs a phone that was already in that state, on the next launch, with nothing for you to do.
- Fixed the schedule you choose not reaching the background sync, which kept to its own hourly cycle whatever you picked. The interval now applies to both, and only to the sync types you have switched on.
- Fixed turning a sync type off and on again re-arming an hourly sync, even with the schedule set to "Manual only". This was one row below the schedule setting, so it undid the fix for anyone who went looking for the problem.
- Fixed settings from a removed account being applied to a new account with the same name, which could leave it never syncing in the background.
If you set the schedule to "Manual only" on v1.10.49 or v1.10.50, this is the release that actually stops it.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.52 (versionCode 110052), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.10.50 (pre-release)
Fixes the sync schedule setting, reported by a user on v1.10.49.
- Fixed "Manual only" starting a sync every 15 minutes instead of stopping automatic syncing. Choosing it now stops the automatic sync, as it says.
- Fixed the schedule you choose not reaching the background sync, which kept to its own hourly cycle whatever you picked. The interval you choose now applies to both, and only to the sync types you have switched on.
This only affects you if you opened the sync schedule setting. If you did, and chose "Manual only", v1.10.49 has been syncing every 15 minutes since.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.50 (versionCode 110050), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.10.49 (pre-release)
Everything here is a fix.
Backups
- Your reminders are now backed up. Proton keeps reminders in a separate field that never appears in the event data, so every backup written before this one contained none at all, and restoring from one lost every alert you had set.
- Timezones are no longer guessed. Exported
.icsfiles used to carry timezone rules taken from a frozen 2023 copy, which moved events by an hour in any zone whose rules changed since. The file now names your zone and leaves the rules to whatever imports it, which is measurably right. - One UID per event. Events were written with the same identifier repeated up to four times, which is invalid, and importers quietly dropped properties they could not reconcile.
- A single unreadable contact no longer costs you the whole backup, and a partial run can no longer push a complete one out of your retention window.
- Encrypted backups fail loudly rather than silently. A backup password the device could no longer read used to produce an archive that opened with nothing.
Restoring
- Restoring a backup now brings back your sync switches, chosen language, logging and backup schedule. Those were never recorded before, so a restore either forced sync on or ignored the file.
- Restoring no longer switches a sync type back on that you had deliberately turned off.
Sync and accounts
- Signing in again after a session expires no longer asks you to name the account and choose what to sync, as though it were new.
- Turning calendar sync off now removes the calendar, instead of leaving an empty entry behind when the calendar held a recurring event with a deleted occurrence.
- A contact edit is never silently discarded. An edit that could not be uploaded is held and retried rather than thrown away.
- Failures say what went wrong. A sync that fetched nothing used to log "completed" and report "an unexpected error occurred".
- Correcting only the capitalisation of a contact's name is no longer reverted on the next sync.
- German: "Kontakte ist ausgeschaltet" now reads correctly.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.49 (versionCode 110049), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.10.30 (pre-release)
Pre-release
This is a pre-release! Please treat this build accordingly, and please report anything odd!
It fixes issues found in 1.10.27.
Fixed
- "Sync all" no longer syncs a type you have switched off. Switching calendar sync off and removing the events, then tapping sync, brought every event straight back
- A forced resync (Server to Local, or Local to Server) now skips a switched-off type entirely. It clears local data before rebuilding it, so touching a type that will not sync would have wiped the data with nothing to restore it
- Switching a sync type off is now honoured wherever the request comes from, not just from the buttons that happened to check
- The message shown when there is nothing to resync is shorter and names the type that was skipped
Thanks
Thanks to C., whose reports found all of the above.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.30 (versionCode 110030), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.10.27 (pre-release)
Pre-release
This is a pre-release. It carries a lot of new work since 1.9.6 and has had less testing than a normal release. Removing synced data from the phone never deletes anything in Proton, but please treat this build accordingly and report anything odd.
New
- Adding an account now asks what to sync; nothing is copied to the phone until you choose
- Turning contacts or calendar sync off offers to remove what is already on the phone
- Contact filter rules: decide which contacts reach the phone, with a dry run that lists affected contacts by name before you save
- Choose which name Proton contacts show under (display name, nickname, first or last name)
- Repair tool for contacts whose name Android already mangled
- Sync database is encrypted at rest with SQLCipher
- Status banner now says when nothing has synced yet, instead of reporting success
Fixed
- Android no longer invents a surname from an email address and sends it to Proton
- Proton display names are no longer shortened when a contact has a title, middle name or second surname
- A rules edit no longer reverts unsent local contact edits
- Pinned PGP keys and per-address encryption settings survive a contact upload
- Contacts held back by an upload rule are no longer deleted by the orphan sweep
- "Keep on phone" now sticks instead of asking again every sync
- Server to Local resync no longer leaves deleted contacts behind
- Sync schedules are armed when a sync type is switched on
- Many further contact and calendar sync fixes
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.10.27 (versionCode 110027), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.9.6 - Sync for Proton (sign-in fixes and diagnostics)
Everything since v1.9.3, including the v1.9.4 and v1.9.5 prereleases.
- Fixed problem reports arriving nearly empty. Two separate label filters were discarding most of the log, including everything the sign-in and verification screens record.
- Copy, Save, Share and Send report now produce the same file, with a header naming the app version, your Android version and your device.
- Added a Sync and All switch to the log screen. It changes only what is shown. Sharing always sends the full log.
- The log is kept in memory only. Nothing is written to storage unless you turn on "Save logs to a file", or save or share the log yourself.
- Fixed a rejected sign-in being reported as an expired session, which hid the real reason behind an unrelated error. A refused authenticator code now says so, instead of showing a raw error number.
- Sign-in now records which second factor an account uses, the names of any registered security keys, and whether your device clock has drifted far enough for codes to be refused.
- Fixed the Verbose logging switch in Settings showing the wrong position after it had been changed from the log screen.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.9.6 (versionCode 109006), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.9.5 - Sync for Proton (memory-only logging)
- Fixed problem reports arriving nearly empty. Two separate label filters were discarding most of the log, including everything the sign-in and verification screens record.
- Copy, Save, Share and Send report now produce the same file, with a header naming the app version, your Android version and your device.
- Added a Sync and All switch to the log screen. It changes only what is shown. Sharing always sends the full log.
- Logs now record whether an account uses a second factor and which one, including the names of registered security keys.
- The log is kept in memory only. Nothing is written to storage unless you turn on "Save logs to a file", or save or share the log yourself.
- Fixed the Verbose logging switch in Settings showing the wrong position after it had been changed from the log screen.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.9.5 (versionCode 109005), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)
v1.9.3 - Sync for Proton (calendar upload fix)
A correctness release on top of v1.9.2. Recommended for everyone, and important if you use Proton's post-quantum encryption keys.
Calendar changes could stop uploading
Sending anything to Proton has to be signed with one of your address keys. The app kept a small signing key ring per address, and under one condition it closed the ring it was still pointing at. Every later attempt then failed with an internal "key ring is closed" error, so calendar edits and invitations stayed on the phone until the app was restarted. Nothing was lost, but nothing left the device either.
It needed the keys to be unlocked twice in one run of the app, which normally only happened after a re-authentication. On an account using post-quantum encryption keys it could happen on the very first sync, because such an account has two keys on one address (a classic one and a post-quantum one) and the second one displaced the first.
Keys are re-read while the app runs
Proton adds keys to a live account: turning on post-quantum encryption generates new user and address keys, and adding an address generates more. The app read your keys once and then trusted that copy for as long as it kept running, so a key created afterwards was invisible until the app was restarted. Calendar unlock in particular depends on the current primary address key, so a new one could stop a calendar decrypting.
Keys are now re-read periodically, and immediately if a calendar key fails to unlock, which is what a key added since the last read looks like.
This is the same class of problem Proton described when they paused their own post-quantum rollout: clients holding a key in memory and not noticing it had changed.
Install: add this repo in Obtainium, or download the APK below and sideload it.
Requires a subscription (7-day free trial): subscribe at https://apps.olausson.de/sync_provider_for_proton/checkout.html, then paste your sub_… id into the app under Settings, Subscription, Activate.
- Version: 1.9.3 (versionCode 109003), minSdk 29 (Android 10+), localised in 25 languages
- Signing cert SHA-256:
c6e622ea0eb35e75b6281084dc20a2b8d5bdc346364ae6a0f8b82679aa68baa8(stable across releases for Obtainium)