Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7262a65 authored by Nihar Thakkar's avatar Nihar Thakkar
Browse files

Use Google and eelo account types for Address books

parent 9c813b22
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ class ServiceDB {
        const val ACCOUNT_NAME = "accountName"
        const val AUTH_STATE = "authState"
        const val ACCOUNT_TYPE = "accountType"
        const val ADDRESS_BOOK_ACCOUNT_TYPE = "addressBookAccountType"
        const val SERVICE = "service"
        const val PRINCIPAL = "principal"

@@ -93,6 +94,7 @@ class ServiceDB {
                    "${Services.ACCOUNT_NAME} TEXT NOT NULL," +
                    "${Services.AUTH_STATE} TEXT," +
                    "${Services.ACCOUNT_TYPE} TEXT," +
                    "${Services.ADDRESS_BOOK_ACCOUNT_TYPE} TEXT," +
                    "${Services.SERVICE} TEXT NOT NULL," +
                    "${Services.PRINCIPAL} TEXT NULL)")
            db.execSQL("CREATE UNIQUE INDEX services_account ON ${Services._TABLE} (${Services.ACCOUNT_NAME},${Services.SERVICE})")
+29 −7
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import at.bitfire.davdroid.DavUtils
import at.bitfire.davdroid.R
import at.bitfire.davdroid.log.Logger
import at.bitfire.davdroid.model.CollectionInfo
import at.bitfire.davdroid.model.ServiceDB
import at.bitfire.davdroid.model.SyncState
import at.bitfire.vcard4android.*
import java.io.ByteArrayOutputStream
@@ -50,8 +51,19 @@ class LocalAddressBook(

        fun create(context: Context, provider: ContentProviderClient, mainAccount: Account, info: CollectionInfo): LocalAddressBook {
            val accountManager = AccountManager.get(context)
            var account = Account(accountName(mainAccount, info), context.getString(R.string.account_type_address_book))

            ServiceDB.OpenHelper(context).use { dbHelper ->
                val db = dbHelper.readableDatabase

                db.query(ServiceDB.Services._TABLE, arrayOf(ServiceDB.Services.ADDRESS_BOOK_ACCOUNT_TYPE),
                        "${ServiceDB.Services.ACCOUNT_NAME}=?", arrayOf(mainAccount.name), null, null, null)?.use { cursor ->
                    if (cursor.moveToNext()) {
                        account = Account(accountName(mainAccount, info), cursor.getString(0))
                    }
                }
            }

            val account = Account(accountName(mainAccount, info), context.getString(R.string.account_type_address_book))
            if (!accountManager.addAccountExplicitly(account, null, initialUserData(mainAccount, info.url)))
                throw IllegalStateException("Couldn't create address book account")

@@ -67,11 +79,19 @@ class LocalAddressBook(
            return addressBook
        }

        fun findAll(context: Context, provider: ContentProviderClient, mainAccount: Account?) = AccountManager.get(context)
                .getAccountsByType(context.getString(R.string.account_type_address_book))
                .map { LocalAddressBook(context, it, provider) }
        fun findAll(context: Context, provider: ContentProviderClient, mainAccount: Account?) : List<LocalAddressBook>{
            val accounts = ArrayList<Account>()
            val eeloAccounts = AccountManager.get(context).getAccountsByType(context.getString(R.string.account_type_eelo_address_book))
            eeloAccounts.forEach { accounts.add(it) }
            val googleAccounts = AccountManager.get(context).getAccountsByType(context.getString(R.string.account_type_google_address_book))
            googleAccounts.forEach { accounts.add(it) }
            val webDavAccounts = AccountManager.get(context).getAccountsByType(context.getString(R.string.account_type_address_book))
            webDavAccounts.forEach { accounts.add(it) }

            return accounts.toTypedArray().map { LocalAddressBook(context, it, provider) }
                    .filter { mainAccount == null || it.mainAccount == mainAccount }
                    .toList()
        }

        fun accountName(mainAccount: Account, info: CollectionInfo): String {
            val baos = ByteArrayOutputStream()
@@ -92,7 +112,9 @@ class LocalAddressBook(
        }

        fun mainAccount(context: Context, account: Account): Account =
                if (account.type == context.getString(R.string.account_type_address_book)) {
                if (account.type == context.getString(R.string.account_type_address_book) ||
                        account.type == context.getString(R.string.account_type_eelo_address_book) ||
                        account.type == context.getString(R.string.account_type_google_address_book)) {
                    val manager = AccountManager.get(context)
                    Account(
                            manager.getUserData(account, USER_DATA_MAIN_ACCOUNT_NAME),
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class EeloAccountAuthenticatorService : Service(), OnAccountsUpdateListener {
                }

                // delete orphaned address book accounts
                accountManager.getAccountsByType(context.getString(R.string.account_type_address_book))
                accountManager.getAccountsByType(context.getString(R.string.account_type_eelo_address_book))
                        .map { LocalAddressBook(context, it, null) }
                        .forEach {
                            try {
+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ class EeloAddressBooksSyncAdapterService: SyncAdapterService() {
                updateLocalAddressBooks(contactsProvider, account)

                val accountManager = AccountManager.get(context)
                for (addressBookAccount in accountManager.getAccountsByType(context.getString(R.string.account_type_address_book))) {
                for (addressBookAccount in accountManager.getAccountsByType(context.getString(R.string.account_type_eelo_address_book))) {
                    Logger.log.log(Level.INFO, "Running sync for address book", addressBookAccount)
                    val syncExtras = Bundle(extras)
                    syncExtras.putBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, true)
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class GoogleAccountAuthenticatorService : Service(), OnAccountsUpdateListener {
                }

                // delete orphaned address book accounts
                accountManager.getAccountsByType(context.getString(R.string.account_type_address_book))
                accountManager.getAccountsByType(context.getString(R.string.account_type_google_address_book))
                        .map { LocalAddressBook(context, it, null) }
                        .forEach {
                            try {
Loading