From 19e5f3ba42784af4b4ef914af74d5d0996362f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Mon, 1 Jul 2024 16:55:44 +0200 Subject: [PATCH 1/4] Change app ui legacy to support compose (cherry picked from commit 586fbff4055f446f5d2cecb7324dcd8b94636258) --- legacy/ui/legacy/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/legacy/ui/legacy/build.gradle.kts b/legacy/ui/legacy/build.gradle.kts index 80b557be9c..4dcf4efb3f 100644 --- a/legacy/ui/legacy/build.gradle.kts +++ b/legacy/ui/legacy/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id(ThunderbirdPlugins.Library.android) + id(ThunderbirdPlugins.Library.androidCompose) alias(libs.plugins.kotlin.parcelize) } From d2b9e34b73aff714f6ba6278421824ebe2f6a352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 3 Sep 2024 16:59:31 +0200 Subject: [PATCH 2/4] Hide slider view by default and only show when LegacyDrawer is initialized --- .../app/k9mail/feature/navigation/drawer/LegacyDrawer.kt | 9 +++++++-- .../src/main/res/layout/navigation_drawer_content.xml | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt index f9b4200cd7..88630c6295 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt @@ -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 @@ -108,6 +109,8 @@ class LegacyDrawer( get() = drawer.isOpen init { + sliderView.visibility = View.VISIBLE + textColor = parent.obtainDrawerTextColor() initializeImageLoader() @@ -553,8 +556,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 diff --git a/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml b/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml index 4200910189..3aa677f7a1 100644 --- a/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml +++ b/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml @@ -11,6 +11,7 @@ android:id="@+id/material_drawer_slider" android:layout_width="wrap_content" android:layout_height="match_parent" + android:visibility="gone" /> From bf4deaf79ee904a85f338ac73584f6078ec1ba30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 3 Sep 2024 17:20:36 +0200 Subject: [PATCH 3/4] Add FolderDrawer to attach the ComposeView to the drawer --- .../feature/navigation/drawer/FolderDrawer.kt | 84 +++++++++++++++++++ .../feature/navigation/drawer/LegacyDrawer.kt | 2 + .../res/layout/navigation_drawer_content.xml | 25 ++++-- .../java/com/fsck/k9/activity/MessageList.kt | 9 +- 4 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt new file mode 100644 index 0000000000..283b4338da --- /dev/null +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt @@ -0,0 +1,84 @@ +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) + } +} diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt index 88630c6295..03e9f84434 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt @@ -85,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 @@ -109,6 +110,7 @@ class LegacyDrawer( get() = drawer.isOpen init { + composeView.visibility = View.GONE sliderView.visibility = View.VISIBLE textColor = parent.obtainDrawerTextColor() diff --git a/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml b/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml index 3aa677f7a1..acd17a69ef 100644 --- a/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml +++ b/feature/navigation/drawer/src/main/res/layout/navigation_drawer_content.xml @@ -7,11 +7,24 @@ android:layout_gravity="start" > - + + + + + + + diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt index c16616fabf..1a269b058c 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt @@ -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) { From c753c8042ccb8a65bec230ff5ccb83799587f338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Fri, 6 Sep 2024 13:56:22 +0200 Subject: [PATCH 4/4] Remove unused DrawerLayout property --- .../app/k9mail/feature/navigation/drawer/LegacyDrawer.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt index 03e9f84434..85c1748023 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt @@ -103,9 +103,6 @@ class LegacyDrawer( private var openedFolderId: Long? = null private var latestFolderList: FolderList? = null - val layout: DrawerLayout - get() = drawer - override val isOpen: Boolean get() = drawer.isOpen