Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.fsck.k9.activity

import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.core.android.account.LegacyAccountDtoManager
import net.thunderbird.feature.search.legacy.LocalMessageSearch

internal fun LocalMessageSearch.resolveAccount(
currentAccount: LegacyAccountDto?,
accountManager: LegacyAccountDtoManager,
): LegacyAccountDto? {
return if (searchAllAccounts()) {
null
} else {
accountUuids.singleOrNull()
?.let { accountManager.getAccount(it) }
?: currentAccount
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1420,20 +1420,8 @@ open class MessageHomeActivity :
singleFolderMode = false

val folderIds = search.folderIds
if (search.searchAllAccounts()) {
val accountUuids = search.accountUuids
if (accountUuids.size == 1) {
account = accountManager.getAccount(accountUuids.elementAt(0))
singleFolderMode = folderIds.size == 1
} else {
account = null
}
} else {
if (account == null && search.accountUuids.size == 1) {
account = accountManager.getAccount(search.accountUuids.elementAt(0))
}
singleFolderMode = folderIds.size == 1
}
account = search.resolveAccount(currentAccount = account, accountManager = accountManager)
singleFolderMode = !search.searchAllAccounts() && folderIds.size == 1

configureDrawer()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.fsck.k9.activity

import assertk.assertThat
import assertk.assertions.isSameInstanceAs
import kotlinx.coroutines.flow.Flow
import net.thunderbird.core.android.account.AccountRemovedListener
import net.thunderbird.core.android.account.AccountsChangeListener
import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.core.android.account.LegacyAccountDtoManager
import net.thunderbird.feature.search.legacy.LocalMessageSearch
import org.junit.Test

class MessageHomeAccountSelectorTest {
private val firstAccount = LegacyAccountDto("11111111-1111-1111-1111-111111111111")
private val secondAccount = LegacyAccountDto("22222222-2222-2222-2222-222222222222")
private val accountManager = FakeLegacyAccountDtoManager(firstAccount, secondAccount)

@Test
fun `single-account search should replace current account`() {
val search = LocalMessageSearch().apply {
addAccountUuid(secondAccount.uuid)
}

val account = search.resolveAccount(
currentAccount = firstAccount,
accountManager = accountManager,
)

assertThat(account).isSameInstanceAs(secondAccount)
}

private class FakeLegacyAccountDtoManager(
vararg accounts: LegacyAccountDto,
) : LegacyAccountDtoManager {
private val accounts = accounts.associateBy { it.uuid }

override fun getAccounts(): List<LegacyAccountDto> = accounts.values.toList()

override fun getAccountsFlow(): Flow<List<LegacyAccountDto>> = error("Not implemented")

override fun getAccount(accountUuid: String): LegacyAccountDto? = accounts[accountUuid]

override fun getAccountFlow(accountUuid: String): Flow<LegacyAccountDto?> = error("Not implemented")

override fun addAccountRemovedListener(listener: AccountRemovedListener) = error("Not implemented")

override fun moveAccount(account: LegacyAccountDto, newPosition: Int) = error("Not implemented")

override fun addOnAccountsChangeListener(accountsChangeListener: AccountsChangeListener) =
error("Not implemented")

override fun removeOnAccountsChangeListener(accountsChangeListener: AccountsChangeListener) =
error("Not implemented")

override fun saveAccount(account: LegacyAccountDto) = error("Not implemented")
}
}
Loading