From 2bdd9ffb168a63f67ceeb31cfa9dd82d0931858e Mon Sep 17 00:00:00 2001 From: dev-12 Date: Mon, 27 Apr 2026 23:28:16 +0530 Subject: [PATCH] Fix Passwords sync not enabling after v3.7 disabled app rollout --- app/src/main/AndroidManifest.xml | 3 +++ app/src/main/kotlin/at/bitfire/davdroid/App.kt | 17 +++++++++++++++++ .../bitfire/davdroid/syncadapter/SyncUtils.kt | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be9978293..ac7ef0f97 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -820,6 +820,9 @@ + + + diff --git a/app/src/main/kotlin/at/bitfire/davdroid/App.kt b/app/src/main/kotlin/at/bitfire/davdroid/App.kt index 1f9f8ac9b..40dc013ce 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/App.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/App.kt @@ -9,6 +9,7 @@ import android.content.Context import android.net.Uri import android.os.StrictMode import androidx.appcompat.content.res.AppCompatResources +import androidx.core.content.edit import androidx.core.graphics.drawable.toBitmap import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration @@ -57,6 +58,8 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide .build() } + private const val UPGRADE_PREFS = "upgrade_prefs" + private const val PASSWORD_SYNC_ENABLED_ON_UPGRADE = "password_sync_enabled_on_upgrade" } @Inject lateinit var accountsUpdatedListener: AccountsUpdatedListener @@ -113,6 +116,20 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide TasksWatcher.watch(this) // check whether a tasks app is currently installed SyncUtils.updateTaskSync(this) + + // We shipped Password app as disabled in v3.7. Adding an account while it is disabled + // leaves its sync toggle off, so retry enabling it on startup until it succeeds. + val upgradePreferences = applicationContext.getSharedPreferences( + UPGRADE_PREFS, + MODE_PRIVATE + ) + if (!upgradePreferences.getBoolean(PASSWORD_SYNC_ENABLED_ON_UPGRADE, false)) { + val enabled = SyncUtils.enablePasswordAppSync(this) + upgradePreferences.edit { + putBoolean(PASSWORD_SYNC_ENABLED_ON_UPGRADE, enabled) + } + Logger.log.log(Level.INFO, "sync for password app enabled : $enabled") + } } } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/SyncUtils.kt b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/SyncUtils.kt index dc16a7db7..535fff051 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/SyncUtils.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/SyncUtils.kt @@ -115,6 +115,18 @@ object SyncUtils { return result } + fun enablePasswordAppSync(context: Context): Boolean { + val eeloAccountType = context.getString(R.string.eelo_account_type) + val account = AccountManager.get(context) + .getAccountsByType(eeloAccountType) + .firstOrNull() ?: return false + + val authority = context.getString(R.string.password_authority) + ContentResolver.setIsSyncable(account, authority, 1) + ContentResolver.setSyncAutomatically(account, authority, true) + return ContentResolver.getSyncAutomatically(account, authority) + } + // task sync utils @WorkerThread -- GitLab