diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be9978293c225f7313c9efe74254fb448d6f955e..ac7ef0f97729a68de7792dea2d21e5255772cbb6 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 1f9f8ac9b48fb091e43e81dd722361f26d1f1767..40dc013cea0bc6e63fdab19e8c7223325f825c95 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 dc16a7db7c2ac1df0987f9c02e7cf8bd7a66a48c..535fff051f86763f6d1d0cfc9d6b21aec0b85e75 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