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

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

Merge pull request #8119 from wmontwe/add-drawer-compose-ui-integration

Add drawer compose UI integration
parents 8e85321e c753c804
Loading
Loading
Loading
Loading
+84 −0
Original line number Diff line number Diff line
package app.k9mail.feature.navigation.drawer

import android.view.Surface
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import app.k9mail.core.ui.compose.designsystem.atom.Surface
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge
import app.k9mail.core.ui.theme.api.FeatureThemeProvider
import app.k9mail.legacy.account.Account
import com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject

class FolderDrawer(
    override val parent: AppCompatActivity,
) : NavigationDrawer, KoinComponent {

    private val themeProvider: FeatureThemeProvider by inject()

    private val drawer: DrawerLayout = parent.findViewById(R.id.navigation_drawer_layout)
    private val drawerView: ComposeView = parent.findViewById(R.id.material_drawer_compose_view)
    private val sliderView: MaterialDrawerSliderView = parent.findViewById(R.id.material_drawer_slider)

    init {
        sliderView.visibility = View.GONE
        drawerView.visibility = View.VISIBLE

        drawerView.setContent {
            themeProvider.WithTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = Color.Red,
                ) {
                    TextBodyLarge("Folder Drawer")
                }
            }
        }
    }

    override val isOpen: Boolean
        get() = drawer.isOpen

    override fun updateUserAccountsAndFolders(account: Account?) {
        // TODO("Not yet implemented")
    }

    override fun selectAccount(accountUuid: String) {
        // TODO("Not yet implemented")
    }

    override fun selectFolder(folderId: Long) {
        // TODO("Not yet implemented")
    }

    override fun selectUnifiedInbox() {
        // TODO("Not yet implemented")
    }

    override fun deselect() {
        // TODO("Not yet implemented")
    }

    override fun open() {
        drawer.openDrawer(GravityCompat.START)
    }

    override fun close() {
        drawer.closeDrawer(GravityCompat.START)
    }

    override fun lock() {
        drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
    }

    override fun unlock() {
        drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
    }
}
+9 −5
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ import android.graphics.PorterDuff
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
@@ -84,6 +85,7 @@ class LegacyDrawer(

    private val drawer: DrawerLayout = parent.findViewById(R.id.navigation_drawer_layout)
    private val sliderView: MaterialDrawerSliderView = parent.findViewById(R.id.material_drawer_slider)
    private val composeView: View = parent.findViewById(R.id.material_drawer_compose_view)
    private val headerView: AccountHeaderView = AccountHeaderView(parent).apply {
        attachToSliderView(this@LegacyDrawer.sliderView)
        dividerBelowHeader = false
@@ -101,13 +103,13 @@ class LegacyDrawer(
    private var openedFolderId: Long? = null
    private var latestFolderList: FolderList? = null

    val layout: DrawerLayout
        get() = drawer

    override val isOpen: Boolean
        get() = drawer.isOpen

    init {
        composeView.visibility = View.GONE
        sliderView.visibility = View.VISIBLE

        textColor = parent.obtainDrawerTextColor()

        initializeImageLoader()
@@ -553,8 +555,10 @@ private fun Context.obtainDrawerTextColor(): Int {
        MaterialDrawerR.attr.materialDrawerStyle,
        MaterialDrawerR.style.Widget_MaterialDrawerStyle,
    )
    val textColor =
        styledAttributes.getColor(MaterialDrawerR.styleable.MaterialDrawerSliderView_materialDrawerPrimaryText, 0)
    val textColor = styledAttributes.getColor(
        MaterialDrawerR.styleable.MaterialDrawerSliderView_materialDrawerPrimaryText,
        0,
    )
    styledAttributes.recycle()

    return textColor
+19 −5
Original line number Diff line number Diff line
@@ -7,10 +7,24 @@
    android:layout_gravity="start"
    >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
            android:id="@+id/material_drawer_slider"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:visibility="invisible"
            />

        <androidx.compose.ui.platform.ComposeView
            android:id="@+id/material_drawer_compose_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="invisible"
            />

    </FrameLayout>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+1 −1
Original line number Diff line number Diff line
plugins {
    id(ThunderbirdPlugins.Library.android)
    id(ThunderbirdPlugins.Library.androidCompose)
    alias(libs.plugins.kotlin.parcelize)
}

+8 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import app.k9mail.core.featureflag.FeatureFlagKey
import app.k9mail.core.featureflag.FeatureFlagProvider
import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons
import app.k9mail.feature.launcher.FeatureLauncherActivity
import app.k9mail.feature.navigation.drawer.FolderDrawer
import app.k9mail.feature.navigation.drawer.LegacyDrawer
import app.k9mail.feature.navigation.drawer.NavigationDrawer
import app.k9mail.legacy.account.Account
@@ -584,7 +585,7 @@ open class MessageList :

        featureFlagProvider.provide(FeatureFlagKey("material3_navigation_drawer"))
            .onEnabled {
                TODO()
                initializeFolderDrawer()
            }
            .onDisabledOrUnavailable {
                initializeLegacyDrawer(savedInstanceState)
@@ -604,6 +605,12 @@ open class MessageList :
        )
    }

    private fun initializeFolderDrawer() {
        navigationDrawer = FolderDrawer(
            parent = this,
        )
    }

    private fun createDrawerListener(): DrawerListener {
        return object : DrawerListener {
            override fun onDrawerClosed(drawerView: View) {