Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove concept of main accounts #989

Merged
merged 30 commits into from
Sep 19, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
8c86a82
Acquire account settings via address book account
sunkup Aug 20, 2024
b355678
Extract the code to find an address books main account to the account…
sunkup Aug 20, 2024
f9089a9
Use collection id as reference in address book account
sunkup Sep 9, 2024
83c3b1c
Remove obsolete baos
sunkup Sep 14, 2024
d57c43a
Find main account directly from collection in SyncManager
sunkup Sep 14, 2024
8b239a8
Require main account to get account settings
sunkup Sep 14, 2024
c7b1809
Stop deleting address book accounts without a main account, since the…
sunkup Sep 14, 2024
f3c0849
Require content provider and introduce static deleteByCollection method
sunkup Sep 14, 2024
5fd7655
Update KDoc
sunkup Sep 14, 2024
4c596d3
Show all address book accounts separately
sunkup Sep 14, 2024
67d0409
Drop mainAccount method
sunkup Sep 14, 2024
484212c
[DI] Use AssistedInject for LocalAddressBook
rfc2822 Sep 17, 2024
e738203
Merge remote-tracking branch 'origin/main-ose' into 878-remove-concep…
rfc2822 Sep 17, 2024
e32c10c
Renaming, remove "main account" concept
rfc2822 Sep 17, 2024
35332e7
Fix debug info
rfc2822 Sep 17, 2024
ee40f02
AccountsCleanupWorker: Rename main account to account
rfc2822 Sep 17, 2024
ea8617a
Further remove main accounts
rfc2822 Sep 17, 2024
53c4ca1
Reduce redundancy
rfc2822 Sep 17, 2024
6555584
AccountSettings: check account type
rfc2822 Sep 17, 2024
5c31a8a
AccountSettingsMigrations: drop v5 -> v6 migration (not tested anyway)
rfc2822 Sep 17, 2024
866cdf0
AccountRepository: directly delete accounts
rfc2822 Sep 17, 2024
beb201b
Remove obsolete workerAccount
rfc2822 Sep 17, 2024
04b6e35
Get all address books, even if not sync enabled
sunkup Sep 18, 2024
cbb2718
Delete orphan address book accounts
sunkup Sep 18, 2024
6e5b3c5
Rename two more occurrences of main account concept
sunkup Sep 18, 2024
dd4efa1
AccountSettings: allow test accounts
rfc2822 Sep 19, 2024
26d3667
Syncer: rename methods for clarity, add KDoc
rfc2822 Sep 19, 2024
dfd81ff
Drop empty test class
sunkup Sep 19, 2024
3b7fa46
Make code more readable and add comment
sunkup Sep 19, 2024
d7ab51f
Merge branch 'main-ose' into 878-remove-concept-of-main-accounts
rfc2822 Sep 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
sunkup marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
*/

package at.bitfire.davdroid.repository

import android.accounts.Account
import android.accounts.AccountManager
import android.content.Context
import at.bitfire.davdroid.R
import at.bitfire.davdroid.settings.AccountSettings
import at.bitfire.davdroid.settings.SettingsManager
import at.bitfire.davdroid.sync.TasksAppManager
import dagger.Lazy
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import io.mockk.mockk
import org.junit.After
import org.junit.Before
import org.junit.Rule
import java.util.logging.Logger
import javax.inject.Inject

@HiltAndroidTest
class AccountRepositoryTest {

@get:Rule
val hiltRule = HiltAndroidRule(this)

@Inject
@ApplicationContext
lateinit var context: Context

private val addressBookAccountType by lazy { context.getString(R.string.account_type_address_book) }
private val addressBookAccount by lazy { Account("sub", addressBookAccountType) }

private val accountManager by lazy { AccountManager.get(context) }

private val collectionRepository = mockk<DavCollectionRepository>(relaxed = true)
private val serviceRepository = mockk<DavServiceRepository>(relaxed = true)
private val accountRepository by lazy { AccountRepository(
mockk<AccountSettings.Factory>(relaxed = true),
context,
collectionRepository,
mockk<DavHomeSetRepository>(relaxed = true),
mockk<Logger>(relaxed = true),
mockk<SettingsManager>(relaxed = true),
serviceRepository,
mockk<Lazy<TasksAppManager>>(relaxed = true),
) }

@Before
fun setUp() {
hiltRule.inject()
}

@After
fun tearDown() {
accountManager.removeAccountExplicitly(addressBookAccount)
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import android.provider.ContactsContract
import android.provider.ContactsContract.CommonDataKinds.GroupMembership
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import at.bitfire.davdroid.settings.SettingsManager
import at.bitfire.vcard4android.BatchOperation
import at.bitfire.vcard4android.CachedGroupMembership
import at.bitfire.vcard4android.Contact
Expand Down Expand Up @@ -68,7 +67,7 @@ class LocalGroupTest {
lateinit var context: Context

@Inject
lateinit var settingsManager: SettingsManager
lateinit var addressbookFactory: LocalTestAddressBook.Factory


private lateinit var addressBookGroupsAsCategories: LocalTestAddressBook
Expand All @@ -78,8 +77,8 @@ class LocalGroupTest {
fun setup() {
hiltRule.inject()

addressBookGroupsAsCategories = LocalTestAddressBook(context, provider, GroupMethod.CATEGORIES)
addressBookGroupsAsVCards = LocalTestAddressBook(context, provider, GroupMethod.GROUP_VCARDS)
addressBookGroupsAsCategories = addressbookFactory.create(provider, GroupMethod.CATEGORIES)
addressBookGroupsAsVCards = addressbookFactory.create(provider, GroupMethod.GROUP_VCARDS)

// clear contacts
addressBookGroupsAsCategories.clear()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,34 @@ package at.bitfire.davdroid.resource
import android.accounts.Account
import android.content.ContentProviderClient
import android.content.Context
import at.bitfire.davdroid.repository.DavCollectionRepository
import at.bitfire.davdroid.repository.DavServiceRepository
import at.bitfire.davdroid.settings.AccountSettings
import at.bitfire.vcard4android.GroupMethod

class LocalTestAddressBook(
context: Context,
provider: ContentProviderClient,
override val groupMethod: GroupMethod
): LocalAddressBook(context, ACCOUNT, provider) {
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dagger.hilt.android.qualifiers.ApplicationContext
import java.util.logging.Logger

class LocalTestAddressBook @AssistedInject constructor(
@Assisted provider: ContentProviderClient,
@Assisted override val groupMethod: GroupMethod,
@ApplicationContext context: Context,
accountSettingsFactory: AccountSettings.Factory,
collectionRepository: DavCollectionRepository,
logger: Logger,
serviceRepository: DavServiceRepository
): LocalAddressBook(ACCOUNT, provider, context, accountSettingsFactory, collectionRepository, logger, serviceRepository) {

companion object {
val ACCOUNT = Account("LocalTestAddressBook", "at.bitfire.davdroid.test")
}

override var mainAccount: Account?
get() = throw NotImplementedError()
set(_) = throw NotImplementedError()
@AssistedFactory
interface Factory {
fun create(provider: ContentProviderClient, groupMethod: GroupMethod): LocalTestAddressBook
}

override var readOnly: Boolean
get() = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class CachedGroupMembershipHandlerTest {
}


@Inject
lateinit var addressbookFactory: LocalTestAddressBook.Factory

@Inject
@ApplicationContext
lateinit var context: Context
Expand All @@ -70,7 +73,7 @@ class CachedGroupMembershipHandlerTest {

@Test
fun testMembership() {
val addressBook = LocalTestAddressBook(context, provider, GroupMethod.GROUP_VCARDS)
val addressBook = addressbookFactory.create(provider, GroupMethod.GROUP_VCARDS)

val contact = Contact()
val localContact = LocalContact(addressBook, contact, null, null, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ class GroupMembershipBuilderTest {
@get:Rule
val hiltRule = HiltAndroidRule(this)

@Inject
lateinit var addressbookFactory: LocalTestAddressBook.Factory

@Inject
@ApplicationContext
lateinit var context: Context
Expand All @@ -71,7 +74,7 @@ class GroupMembershipBuilderTest {
val contact = Contact().apply {
categories += "TEST GROUP"
}
val addressBookGroupsAsCategories = LocalTestAddressBook(context, provider, GroupMethod.CATEGORIES)
val addressBookGroupsAsCategories = addressbookFactory.create(provider, GroupMethod.CATEGORIES)
GroupMembershipBuilder(Uri.EMPTY, null, contact, addressBookGroupsAsCategories, false).build().also { result ->
assertEquals(1, result.size)
assertEquals(GroupMembership.CONTENT_ITEM_TYPE, result[0].values[GroupMembership.MIMETYPE])
Expand All @@ -84,7 +87,7 @@ class GroupMembershipBuilderTest {
val contact = Contact().apply {
categories += "TEST GROUP"
}
val addressBookGroupsAsVCards = LocalTestAddressBook(context, provider, GroupMethod.GROUP_VCARDS)
val addressBookGroupsAsVCards = addressbookFactory.create(provider, GroupMethod.GROUP_VCARDS)
GroupMembershipBuilder(Uri.EMPTY, null, contact, addressBookGroupsAsVCards, false).build().also { result ->
// group membership is constructed during post-processing
assertEquals(0, result.size)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ class GroupMembershipHandlerTest {

}

@Inject
lateinit var addressbookFactory: LocalTestAddressBook.Factory

@Inject @ApplicationContext
lateinit var context: Context

Expand All @@ -71,7 +74,7 @@ class GroupMembershipHandlerTest {

@Test
fun testMembership_GroupsAsCategories() {
val addressBookGroupsAsCategories = LocalTestAddressBook(context, provider, GroupMethod.CATEGORIES)
val addressBookGroupsAsCategories = addressbookFactory.create(provider, GroupMethod.CATEGORIES)
val addressBookGroupsAsCategoriesGroup = addressBookGroupsAsCategories.findOrCreateGroup("TEST GROUP")

val contact = Contact()
Expand All @@ -87,7 +90,7 @@ class GroupMembershipHandlerTest {

@Test
fun testMembership_GroupsAsVCards() {
val addressBookGroupsAsVCards = LocalTestAddressBook(context, provider, GroupMethod.GROUP_VCARDS)
val addressBookGroupsAsVCards = addressbookFactory.create(provider, GroupMethod.GROUP_VCARDS)

val contact = Contact()
val localContact = LocalContact(addressBookGroupsAsVCards, contact, null, null, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ class SyncManagerTest {
}
) = syncManagerFactory.create(
account,
accountSettingsFactory.forAccount(account),
accountSettingsFactory.create(account),
arrayOf(),
"TestAuthority",
HttpClient.Builder(context).build(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ class PushRegistrationWorker @AssistedInject constructor(
}

private suspend fun registerPushSubscription(collection: Collection, account: Account, endpoint: String) {
val settings = accountSettingsFactory.forAccount(account)
val settings = accountSettingsFactory.create(account)

runInterruptible {
HttpClient.Builder(applicationContext, settings)
Expand Down Expand Up @@ -158,7 +158,7 @@ class PushRegistrationWorker @AssistedInject constructor(
}

private suspend fun unregisterPushSubscription(collection: Collection, account: Account, url: HttpUrl) {
val settings = accountSettingsFactory.forAccount(account)
val settings = accountSettingsFactory.create(account)

runInterruptible {
HttpClient.Builder(applicationContext, settings)
Expand Down
Loading
Loading