Loading app/src/main/java/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.kt +1 −42 Original line number Diff line number Diff line Loading @@ -12,16 +12,10 @@ import android.app.Service import android.content.Context import android.content.Intent import android.os.Bundle import androidx.annotation.WorkerThread import at.bitfire.davdroid.R import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.model.AppDatabase import at.bitfire.davdroid.resource.LocalAddressBook import at.bitfire.davdroid.ui.setup.LoginActivity import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.logging.Level /** Loading @@ -32,41 +26,6 @@ import java.util.logging.Level */ class AccountAuthenticatorService: Service(), OnAccountsUpdateListener { companion object { @WorkerThread @Synchronized fun cleanupAccounts(context: Context) { Logger.log.info("Cleaning up orphaned accounts") val accountManager = AccountManager.get(context) val accountNames = accountManager.getAccountsByType(context.getString(R.string.account_type)) .map { it.name } // delete orphaned address book accounts accountManager.getAccountsByType(context.getString(R.string.account_type_address_book)) .map { LocalAddressBook(context, it, null) } .forEach { try { if (!accountNames.contains(it.mainAccount.name)) it.delete() } catch(e: Exception) { Logger.log.log(Level.SEVERE, "Couldn't delete address book account", e) } } // delete orphaned services in DB val db = AppDatabase.getInstance(context) val serviceDao = db.serviceDao() if (accountNames.isEmpty()) serviceDao.deleteAll() else serviceDao.deleteExceptAccounts(accountNames.toTypedArray()) } } private lateinit var accountManager: AccountManager private lateinit var accountAuthenticator: AccountAuthenticator Loading @@ -88,7 +47,7 @@ class AccountAuthenticatorService: Service(), OnAccountsUpdateListener { override fun onAccountsUpdated(accounts: Array<out Account>?) { CoroutineScope(Dispatchers.Default).launch { cleanupAccounts(this@AccountAuthenticatorService) AccountUtils.cleanupAccounts(this@AccountAuthenticatorService) } } Loading app/src/main/java/at/bitfire/davdroid/syncadapter/AccountUtils.kt +35 −0 Original line number Diff line number Diff line Loading @@ -4,10 +4,45 @@ import android.accounts.Account import android.accounts.AccountManager import android.content.Context import android.os.Bundle import androidx.annotation.AnyThread import at.bitfire.davdroid.R import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.model.AppDatabase import at.bitfire.davdroid.resource.LocalAddressBook import java.util.logging.Level object AccountUtils { @AnyThread @Synchronized fun cleanupAccounts(context: Context) { Logger.log.info("Cleaning up orphaned accounts") val accountManager = AccountManager.get(context) val accountNames = accountManager.getAccountsByType(context.getString(R.string.account_type)) .map { it.name } // delete orphaned address book accounts accountManager.getAccountsByType(context.getString(R.string.account_type_address_book)) .map { LocalAddressBook(context, it, null) } .forEach { try { if (!accountNames.contains(it.mainAccount.name)) it.delete() } catch(e: Exception) { Logger.log.log(Level.SEVERE, "Couldn't delete address book account", e) } } // delete orphaned services in DB val db = AppDatabase.getInstance(context) val serviceDao = db.serviceDao() if (accountNames.isEmpty()) serviceDao.deleteAll() else serviceDao.deleteExceptAccounts(accountNames.toTypedArray()) } /** * Creates an account and makes sure the user data are set correctly. * Loading app/src/main/java/at/bitfire/davdroid/ui/account/RenameAccountFragment.kt +7 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,13 @@ class RenameAccountFragment: DialogFragment() { // update account name references in database val db = AppDatabase.getInstance(context) try { db.serviceDao().renameAccount(oldAccount.name, newName) } catch (e: Exception) { Toast.makeText(context, R.string.account_rename_couldnt_rename, Toast.LENGTH_LONG).show() Logger.log.log(Level.SEVERE, "Couldn't update service DB", e) return } // update main account of address book accounts if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) Loading Loading
app/src/main/java/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.kt +1 −42 Original line number Diff line number Diff line Loading @@ -12,16 +12,10 @@ import android.app.Service import android.content.Context import android.content.Intent import android.os.Bundle import androidx.annotation.WorkerThread import at.bitfire.davdroid.R import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.model.AppDatabase import at.bitfire.davdroid.resource.LocalAddressBook import at.bitfire.davdroid.ui.setup.LoginActivity import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.logging.Level /** Loading @@ -32,41 +26,6 @@ import java.util.logging.Level */ class AccountAuthenticatorService: Service(), OnAccountsUpdateListener { companion object { @WorkerThread @Synchronized fun cleanupAccounts(context: Context) { Logger.log.info("Cleaning up orphaned accounts") val accountManager = AccountManager.get(context) val accountNames = accountManager.getAccountsByType(context.getString(R.string.account_type)) .map { it.name } // delete orphaned address book accounts accountManager.getAccountsByType(context.getString(R.string.account_type_address_book)) .map { LocalAddressBook(context, it, null) } .forEach { try { if (!accountNames.contains(it.mainAccount.name)) it.delete() } catch(e: Exception) { Logger.log.log(Level.SEVERE, "Couldn't delete address book account", e) } } // delete orphaned services in DB val db = AppDatabase.getInstance(context) val serviceDao = db.serviceDao() if (accountNames.isEmpty()) serviceDao.deleteAll() else serviceDao.deleteExceptAccounts(accountNames.toTypedArray()) } } private lateinit var accountManager: AccountManager private lateinit var accountAuthenticator: AccountAuthenticator Loading @@ -88,7 +47,7 @@ class AccountAuthenticatorService: Service(), OnAccountsUpdateListener { override fun onAccountsUpdated(accounts: Array<out Account>?) { CoroutineScope(Dispatchers.Default).launch { cleanupAccounts(this@AccountAuthenticatorService) AccountUtils.cleanupAccounts(this@AccountAuthenticatorService) } } Loading
app/src/main/java/at/bitfire/davdroid/syncadapter/AccountUtils.kt +35 −0 Original line number Diff line number Diff line Loading @@ -4,10 +4,45 @@ import android.accounts.Account import android.accounts.AccountManager import android.content.Context import android.os.Bundle import androidx.annotation.AnyThread import at.bitfire.davdroid.R import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.model.AppDatabase import at.bitfire.davdroid.resource.LocalAddressBook import java.util.logging.Level object AccountUtils { @AnyThread @Synchronized fun cleanupAccounts(context: Context) { Logger.log.info("Cleaning up orphaned accounts") val accountManager = AccountManager.get(context) val accountNames = accountManager.getAccountsByType(context.getString(R.string.account_type)) .map { it.name } // delete orphaned address book accounts accountManager.getAccountsByType(context.getString(R.string.account_type_address_book)) .map { LocalAddressBook(context, it, null) } .forEach { try { if (!accountNames.contains(it.mainAccount.name)) it.delete() } catch(e: Exception) { Logger.log.log(Level.SEVERE, "Couldn't delete address book account", e) } } // delete orphaned services in DB val db = AppDatabase.getInstance(context) val serviceDao = db.serviceDao() if (accountNames.isEmpty()) serviceDao.deleteAll() else serviceDao.deleteExceptAccounts(accountNames.toTypedArray()) } /** * Creates an account and makes sure the user data are set correctly. * Loading
app/src/main/java/at/bitfire/davdroid/ui/account/RenameAccountFragment.kt +7 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,13 @@ class RenameAccountFragment: DialogFragment() { // update account name references in database val db = AppDatabase.getInstance(context) try { db.serviceDao().renameAccount(oldAccount.name, newName) } catch (e: Exception) { Toast.makeText(context, R.string.account_rename_couldnt_rename, Toast.LENGTH_LONG).show() Logger.log.log(Level.SEVERE, "Couldn't update service DB", e) return } // update main account of address book accounts if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) Loading