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:
parent
937bb3da22
commit
b8c7457208
@ -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() },
|
||||
)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -95,6 +95,8 @@ class DrawerViewModel(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
emitEffect(Effect.OpenAccount(account.account))
|
||||
}
|
||||
|
||||
private fun ImmutableList<DisplayAccount>.nextOrFirst(account: DisplayAccount): DisplayAccount? {
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user