0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-19 19:52:14 +02:00

Change selectAccount to also trigger open account

This commit is contained in:
Wolf-Martell Montwé 2024-09-13 14:44:51 +02:00
parent 937bb3da22
commit b8c7457208
No known key found for this signature in database
GPG Key ID: 6D45B21512ACBF72
7 changed files with 33 additions and 3 deletions

View File

@ -15,6 +15,7 @@ import org.koin.core.component.inject
class FolderDrawer(
override val parent: AppCompatActivity,
private val openAccount: (account: Account) -> Unit,
private val openFolder: (folderId: Long) -> Unit,
createDrawerListener: () -> DrawerLayout.DrawerListener,
) : NavigationDrawer, KoinComponent {
@ -35,6 +36,7 @@ class FolderDrawer(
drawerView.setContent {
themeProvider.WithTheme {
DrawerView(
openAccount = openAccount,
openFolder = openFolder,
closeDrawer = { close() },
)

View File

@ -3,6 +3,7 @@ package app.k9mail.feature.navigation.drawer.ui
import androidx.compose.runtime.Stable
import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel
import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount
import app.k9mail.legacy.account.Account
import app.k9mail.legacy.ui.folder.DisplayFolder
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
@ -29,6 +30,7 @@ interface DrawerContract {
}
sealed interface Effect {
data class OpenAccount(val account: Account) : Effect
data class OpenFolder(val folderId: Long) : Effect
data object CloseDrawer : Effect
}

View File

@ -6,16 +6,19 @@ import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox
import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Effect
import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Event
import app.k9mail.feature.navigation.drawer.ui.DrawerContract.ViewModel
import app.k9mail.legacy.account.Account
import org.koin.androidx.compose.koinViewModel
@Composable
fun DrawerView(
openAccount: (account: Account) -> Unit,
openFolder: (folderId: Long) -> Unit,
closeDrawer: () -> Unit,
viewModel: ViewModel = koinViewModel<DrawerViewModel>(),
) {
val (state, dispatch) = viewModel.observe { effect ->
when (effect) {
is Effect.OpenAccount -> openAccount(effect.account)
is Effect.OpenFolder -> openFolder(effect.folderId)
Effect.CloseDrawer -> closeDrawer()
}

View File

@ -95,6 +95,8 @@ class DrawerViewModel(
)
}
}
emitEffect(Effect.OpenAccount(account.account))
}
private fun ImmutableList<DisplayAccount>.nextOrFirst(account: DisplayAccount): DisplayAccount? {

View File

@ -18,27 +18,36 @@ class DrawerViewKtTest : ComposeTest() {
fun `should delegate effects`() = runTest {
val initialState = State()
val viewModel = FakeDrawerViewModel(initialState)
var openAccountCounter = 0
var openFolderCounter = 0
var closeDrawerCounter = 0
setContentWithTheme {
DrawerView(
openAccount = { openAccountCounter++ },
openFolder = { openFolderCounter++ },
closeDrawer = { closeDrawerCounter++ },
viewModel = viewModel,
)
}
assertThat(openAccountCounter).isEqualTo(0)
assertThat(openFolderCounter).isEqualTo(0)
assertThat(closeDrawerCounter).isEqualTo(0)
viewModel.effect(Effect.OpenAccount(FakeData.ACCOUNT))
assertThat(openAccountCounter).isEqualTo(1)
viewModel.effect(Effect.OpenFolder(1))
assertThat(openAccountCounter).isEqualTo(1)
assertThat(openFolderCounter).isEqualTo(1)
assertThat(closeDrawerCounter).isEqualTo(0)
viewModel.effect(Effect.CloseDrawer)
assertThat(openAccountCounter).isEqualTo(1)
assertThat(openFolderCounter).isEqualTo(1)
assertThat(closeDrawerCounter).isEqualTo(1)
}
@ -52,6 +61,7 @@ class DrawerViewKtTest : ComposeTest() {
setContentWithTheme {
DrawerView(
openAccount = {},
openFolder = {},
closeDrawer = {},
viewModel = viewModel,

View File

@ -5,7 +5,6 @@ import app.k9mail.core.mail.folder.api.FolderType
import app.k9mail.core.ui.compose.testing.MainDispatcherRule
import app.k9mail.core.ui.compose.testing.mvi.assertThatAndEffectTurbineConsumed
import app.k9mail.core.ui.compose.testing.mvi.eventStateTest
import app.k9mail.core.ui.compose.testing.mvi.turbines
import app.k9mail.core.ui.compose.testing.mvi.turbinesWithInitialStateCheck
import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount
import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Effect
@ -105,6 +104,13 @@ class DrawerViewModelTest {
val testSubject = createTestSubject(
displayAccountsFlow = getDisplayAccountsFlow,
)
val turbines = turbinesWithInitialStateCheck(
testSubject,
State(
accounts = displayAccounts.toImmutableList(),
currentAccount = displayAccounts.first(),
),
)
advanceUntilIdle()
@ -112,7 +118,11 @@ class DrawerViewModelTest {
advanceUntilIdle()
assertThat(testSubject.state.value.currentAccount).isEqualTo(displayAccounts[1])
assertThat(turbines.awaitStateItem().currentAccount).isEqualTo(displayAccounts[1])
turbines.assertThatAndEffectTurbineConsumed {
isEqualTo(Effect.OpenAccount(displayAccounts[1].account))
}
}
@Test

View File

@ -608,6 +608,7 @@ open class MessageList :
private fun initializeFolderDrawer() {
navigationDrawer = FolderDrawer(
parent = this,
openAccount = { account -> openRealAccount(account) },
openFolder = { folderId -> openFolder(folderId) },
createDrawerListener = { createDrawerListener() },
)
@ -632,7 +633,7 @@ open class MessageList :
}
}
fun openFolder(folderId: Long) {
private fun openFolder(folderId: Long) {
if (displayMode == DisplayMode.SPLIT_VIEW) {
removeMessageViewContainerFragment()
showMessageViewPlaceHolder()