Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 801618dd authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé Committed by GitHub
Browse files

Merge pull request #8176 from wmontwe/add-folder-drawer-state

Add folder drawer state
parents 9a3dbad6 6d6059d4
Loading
Loading
Loading
Loading
+26 −5
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ internal fun DrawerContentPreview() {
        DrawerContent(
            state = DrawerContract.State(
                accounts = persistentListOf(),
                selectedAccount = null,
                selectedAccountUuid = null,
                folders = persistentListOf(),
            ),
            onEvent = {},
@@ -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 = {},
@@ -47,7 +47,7 @@ internal fun DrawerContentWithFoldersPreview() {
                accounts = persistentListOf(
                    DISPLAY_ACCOUNT,
                ),
                selectedAccount = null,
                selectedAccountUuid = null,
                folders = persistentListOf(
                    UNIFIED_FOLDER,
                    DISPLAY_FOLDER,
@@ -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 = {},
        )
+36 −6
Original line number Diff line number Diff line
@@ -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,
@@ -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
@@ -38,7 +50,10 @@ class FolderDrawer(

        drawerView.setContent {
            themeProvider.WithTheme {
                val state = drawerState.collectAsStateWithLifecycle()

                DrawerView(
                    drawerState = state.value,
                    openAccount = openAccount,
                    openFolder = openFolder,
                    openUnifiedFolder = openUnifiedFolder,
@@ -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() {
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+2 −1
Original line number Diff line number Diff line
@@ -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()

+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ val navigationDrawerModule: Module = module {

    single<UseCase.SyncAccount> {
        SyncAccount(
            accountManager = get(),
            messagingController = get(),
        )
    }
Loading