0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-19 19:52:14 +02:00

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

Add drawer compose UI integration
This commit is contained in:
Wolf-Martell Montwé 2024-09-09 11:30:25 +02:00 committed by GitHub
commit 8e6c326603
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 121 additions and 12 deletions

View File

@ -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)
}
}

View File

@ -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

View File

@ -7,10 +7,24 @@
android:layout_gravity="start"
>
<com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
android:id="@+id/material_drawer_slider"
android:layout_width="wrap_content"
android:layout_height="match_parent"
/>
<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>

View File

@ -1,5 +1,5 @@
plugins {
id(ThunderbirdPlugins.Library.android)
id(ThunderbirdPlugins.Library.androidCompose)
alias(libs.plugins.kotlin.parcelize)
}

View File

@ -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) {