Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -35,6 +36,7 @@ class FolderDrawer( drawerView.setContent { themeProvider.WithTheme { DrawerView( openAccount = openAccount, openFolder = openFolder, closeDrawer = { close() }, ) Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 } Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerView.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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() } Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewModel.kt +2 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,8 @@ class DrawerViewModel( ) } } emitEffect(Effect.OpenAccount(account.account)) } private fun ImmutableList<DisplayAccount>.nextOrFirst(account: DisplayAccount): DisplayAccount? { Loading feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewKtTest.kt +10 −0 Original line number Diff line number Diff line Loading @@ -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) } Loading @@ -52,6 +61,7 @@ class DrawerViewKtTest : ComposeTest() { setContentWithTheme { DrawerView( openAccount = {}, openFolder = {}, closeDrawer = {}, viewModel = viewModel, Loading Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -35,6 +36,7 @@ class FolderDrawer( drawerView.setContent { themeProvider.WithTheme { DrawerView( openAccount = openAccount, openFolder = openFolder, closeDrawer = { close() }, ) Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 } Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerView.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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() } Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewModel.kt +2 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,8 @@ class DrawerViewModel( ) } } emitEffect(Effect.OpenAccount(account.account)) } private fun ImmutableList<DisplayAccount>.nextOrFirst(account: DisplayAccount): DisplayAccount? { Loading
feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewKtTest.kt +10 −0 Original line number Diff line number Diff line Loading @@ -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) } Loading @@ -52,6 +61,7 @@ class DrawerViewKtTest : ComposeTest() { setContentWithTheme { DrawerView( openAccount = {}, openFolder = {}, closeDrawer = {}, viewModel = viewModel, Loading