Loading feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContentPreview.kt +26 −5 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ internal fun DrawerContentPreview() { DrawerContent( state = DrawerContract.State( accounts = persistentListOf(), selectedAccount = null, selectedAccountUuid = null, folders = persistentListOf(), ), onEvent = {}, Loading @@ -30,7 +30,7 @@ internal fun DrawerContentWithAccountPreview() { DrawerContent( state = DrawerContract.State( accounts = persistentListOf(DISPLAY_ACCOUNT), selectedAccount = DISPLAY_ACCOUNT, selectedAccountUuid = DISPLAY_ACCOUNT.uuid, folders = persistentListOf(), ), onEvent = {}, Loading @@ -47,7 +47,7 @@ internal fun DrawerContentWithFoldersPreview() { accounts = persistentListOf( DISPLAY_ACCOUNT, ), selectedAccount = null, selectedAccountUuid = null, folders = persistentListOf( UNIFIED_FOLDER, DISPLAY_FOLDER, Loading @@ -67,12 +67,33 @@ internal fun DrawerContentWithSelectedFolderPreview() { accounts = persistentListOf( DISPLAY_ACCOUNT, ), selectedAccount = DISPLAY_ACCOUNT, selectedAccountUuid = DISPLAY_ACCOUNT.uuid, folders = persistentListOf( UNIFIED_FOLDER, DISPLAY_FOLDER, ), selectedFolder = DISPLAY_FOLDER, selectedFolderId = DISPLAY_FOLDER.id, ), onEvent = {}, ) } } @Composable @Preview(showBackground = true) internal fun DrawerContentWithSelectedUnifiedFolderPreview() { PreviewWithTheme { DrawerContent( state = DrawerContract.State( accounts = persistentListOf( DISPLAY_ACCOUNT, ), selectedAccountUuid = DISPLAY_ACCOUNT.uuid, folders = persistentListOf( UNIFIED_FOLDER, DISPLAY_FOLDER, ), selectedFolderId = UNIFIED_FOLDER.id, ), onEvent = {}, ) Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt +36 −6 Original line number Diff line number Diff line Loading @@ -5,14 +5,24 @@ import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import app.k9mail.core.ui.theme.api.FeatureThemeProvider import app.k9mail.feature.navigation.drawer.domain.entity.DisplayUnifiedFolderType import app.k9mail.feature.navigation.drawer.domain.entity.createDisplayAccountFolderId import app.k9mail.feature.navigation.drawer.ui.DrawerView import app.k9mail.legacy.account.Account import com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import org.koin.core.component.KoinComponent import org.koin.core.component.inject internal data class FolderDrawerState( val selectedAccountUuid: String? = null, val selectedFolderId: String? = null, ) class FolderDrawer( override val parent: AppCompatActivity, private val openAccount: (account: Account) -> Unit, Loading @@ -30,6 +40,8 @@ class FolderDrawer( private val sliderView: MaterialDrawerSliderView = parent.findViewById(R.id.material_drawer_slider) private val swipeRefreshLayout: SwipeRefreshLayout = parent.findViewById(R.id.material_drawer_swipe_refresh) private val drawerState = MutableStateFlow(FolderDrawerState()) init { sliderView.visibility = View.GONE drawerView.visibility = View.VISIBLE Loading @@ -38,7 +50,10 @@ class FolderDrawer( drawerView.setContent { themeProvider.WithTheme { val state = drawerState.collectAsStateWithLifecycle() DrawerView( drawerState = state.value, openAccount = openAccount, openFolder = openFolder, openUnifiedFolder = openUnifiedFolder, Loading @@ -54,23 +69,38 @@ class FolderDrawer( get() = drawer.isOpen override fun updateUserAccountsAndFolders(account: Account?) { // TODO("Not yet implemented") // no-op } override fun selectAccount(accountUuid: String) { // TODO("Not yet implemented") drawerState.update { it.copy(selectedAccountUuid = accountUuid) } } override fun selectFolder(folderId: Long) { // TODO("Not yet implemented") override fun selectFolder(accountUuid: String, folderId: Long) { drawerState.update { it.copy( selectedAccountUuid = accountUuid, selectedFolderId = createDisplayAccountFolderId(accountUuid, folderId), ) } } override fun selectUnifiedInbox() { // TODO("Not yet implemented") drawerState.update { it.copy( selectedFolderId = DisplayUnifiedFolderType.INBOX.id, ) } } override fun deselect() { // TODO("Not yet implemented") drawerState.update { it.copy( selectedFolderId = null, ) } } override fun open() { Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt +1 −1 Original line number Diff line number Diff line Loading @@ -437,7 +437,7 @@ class LegacyDrawer( } } override fun selectFolder(folderId: Long) { override fun selectFolder(accountUuid: String, folderId: Long) { deselect() openedFolderId = folderId for (drawerId in userFolderDrawerIds) { Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/NavigationDrawer.kt +2 −1 Original line number Diff line number Diff line Loading @@ -7,11 +7,12 @@ interface NavigationDrawer { val parent: AppCompatActivity val isOpen: Boolean // TODO: remove once LegacyDrawer is removed fun updateUserAccountsAndFolders(account: Account?) fun selectAccount(accountUuid: String) fun selectFolder(folderId: Long) fun selectFolder(accountUuid: String, folderId: Long) fun selectUnifiedInbox() Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/NavigationDrawerModule.kt +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ val navigationDrawerModule: Module = module { single<UseCase.SyncAccount> { SyncAccount( accountManager = get(), messagingController = get(), ) } Loading Loading
feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContentPreview.kt +26 −5 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ internal fun DrawerContentPreview() { DrawerContent( state = DrawerContract.State( accounts = persistentListOf(), selectedAccount = null, selectedAccountUuid = null, folders = persistentListOf(), ), onEvent = {}, Loading @@ -30,7 +30,7 @@ internal fun DrawerContentWithAccountPreview() { DrawerContent( state = DrawerContract.State( accounts = persistentListOf(DISPLAY_ACCOUNT), selectedAccount = DISPLAY_ACCOUNT, selectedAccountUuid = DISPLAY_ACCOUNT.uuid, folders = persistentListOf(), ), onEvent = {}, Loading @@ -47,7 +47,7 @@ internal fun DrawerContentWithFoldersPreview() { accounts = persistentListOf( DISPLAY_ACCOUNT, ), selectedAccount = null, selectedAccountUuid = null, folders = persistentListOf( UNIFIED_FOLDER, DISPLAY_FOLDER, Loading @@ -67,12 +67,33 @@ internal fun DrawerContentWithSelectedFolderPreview() { accounts = persistentListOf( DISPLAY_ACCOUNT, ), selectedAccount = DISPLAY_ACCOUNT, selectedAccountUuid = DISPLAY_ACCOUNT.uuid, folders = persistentListOf( UNIFIED_FOLDER, DISPLAY_FOLDER, ), selectedFolder = DISPLAY_FOLDER, selectedFolderId = DISPLAY_FOLDER.id, ), onEvent = {}, ) } } @Composable @Preview(showBackground = true) internal fun DrawerContentWithSelectedUnifiedFolderPreview() { PreviewWithTheme { DrawerContent( state = DrawerContract.State( accounts = persistentListOf( DISPLAY_ACCOUNT, ), selectedAccountUuid = DISPLAY_ACCOUNT.uuid, folders = persistentListOf( UNIFIED_FOLDER, DISPLAY_FOLDER, ), selectedFolderId = UNIFIED_FOLDER.id, ), onEvent = {}, ) Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt +36 −6 Original line number Diff line number Diff line Loading @@ -5,14 +5,24 @@ import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import app.k9mail.core.ui.theme.api.FeatureThemeProvider import app.k9mail.feature.navigation.drawer.domain.entity.DisplayUnifiedFolderType import app.k9mail.feature.navigation.drawer.domain.entity.createDisplayAccountFolderId import app.k9mail.feature.navigation.drawer.ui.DrawerView import app.k9mail.legacy.account.Account import com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import org.koin.core.component.KoinComponent import org.koin.core.component.inject internal data class FolderDrawerState( val selectedAccountUuid: String? = null, val selectedFolderId: String? = null, ) class FolderDrawer( override val parent: AppCompatActivity, private val openAccount: (account: Account) -> Unit, Loading @@ -30,6 +40,8 @@ class FolderDrawer( private val sliderView: MaterialDrawerSliderView = parent.findViewById(R.id.material_drawer_slider) private val swipeRefreshLayout: SwipeRefreshLayout = parent.findViewById(R.id.material_drawer_swipe_refresh) private val drawerState = MutableStateFlow(FolderDrawerState()) init { sliderView.visibility = View.GONE drawerView.visibility = View.VISIBLE Loading @@ -38,7 +50,10 @@ class FolderDrawer( drawerView.setContent { themeProvider.WithTheme { val state = drawerState.collectAsStateWithLifecycle() DrawerView( drawerState = state.value, openAccount = openAccount, openFolder = openFolder, openUnifiedFolder = openUnifiedFolder, Loading @@ -54,23 +69,38 @@ class FolderDrawer( get() = drawer.isOpen override fun updateUserAccountsAndFolders(account: Account?) { // TODO("Not yet implemented") // no-op } override fun selectAccount(accountUuid: String) { // TODO("Not yet implemented") drawerState.update { it.copy(selectedAccountUuid = accountUuid) } } override fun selectFolder(folderId: Long) { // TODO("Not yet implemented") override fun selectFolder(accountUuid: String, folderId: Long) { drawerState.update { it.copy( selectedAccountUuid = accountUuid, selectedFolderId = createDisplayAccountFolderId(accountUuid, folderId), ) } } override fun selectUnifiedInbox() { // TODO("Not yet implemented") drawerState.update { it.copy( selectedFolderId = DisplayUnifiedFolderType.INBOX.id, ) } } override fun deselect() { // TODO("Not yet implemented") drawerState.update { it.copy( selectedFolderId = null, ) } } override fun open() { Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt +1 −1 Original line number Diff line number Diff line Loading @@ -437,7 +437,7 @@ class LegacyDrawer( } } override fun selectFolder(folderId: Long) { override fun selectFolder(accountUuid: String, folderId: Long) { deselect() openedFolderId = folderId for (drawerId in userFolderDrawerIds) { Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/NavigationDrawer.kt +2 −1 Original line number Diff line number Diff line Loading @@ -7,11 +7,12 @@ interface NavigationDrawer { val parent: AppCompatActivity val isOpen: Boolean // TODO: remove once LegacyDrawer is removed fun updateUserAccountsAndFolders(account: Account?) fun selectAccount(accountUuid: String) fun selectFolder(folderId: Long) fun selectFolder(accountUuid: String, folderId: Long) fun selectUnifiedInbox() Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/NavigationDrawerModule.kt +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ val navigationDrawerModule: Module = module { single<UseCase.SyncAccount> { SyncAccount( accountManager = get(), messagingController = get(), ) } Loading