Repository: thunderbird/thunderbird-android
Pull request #8902: Fix issue 7308
Author: login: Smatek
Created: 2025-03-06T19:54:36Z | Merged: 2025-03-19T11:39:18Z

Fixes #7308

**left** image is after changes, **right** is before changes
![image](https://github.com/user-attachments/assets/d0a9dd8e-a06f-4d95-a9fe-742b6a1698af)
![image](https://github.com/user-attachments/assets/8294a233-915f-4646-affb-01cc87b7addf)
![image](https://github.com/user-attachments/assets/abd72354-1c6f-44a6-a43e-9e66f0ed705c)
![image](https://github.com/user-attachments/assets/ee626849-38ec-42d7-b2c6-49386c2a3384)



Linked issue #7308: Make bottom Android navigation bar background transparent
### Checklist

- [X] I have used the search function to see if someone else has already submitted the same feature request.
- [X] I will describe the problem with as much detail as possible.
- [X] This issue only contains a request for one single feature, **not** multiple (related) features.

### App version

6.711

### Problem you are trying to solve

The Android navigation bar (for gesture navigation) at the bottom has a solid color background and I don't think that looks very good

### Suggested solution

I think it would look a lot better if it didn't have a background and was displayed on top of the app without the background instead 

### Screenshots / Drawings / Technical details

_No response_
Linked issue comments: user: login: bernhard-fp
created_at: 2023-11-11T16:37:28Z
body: @Fxsch Could you please post a screenshot of the bottom navigation you mean?
author_association: NONE
user: login: Fxsch
created_at: 2023-11-11T16:54:15Z
body: The one at the very bottom. It's not part of the app but of the operating system, an app can render itself behind it tho.
![Screenshot_20231111-175253_K-9 Mail](https://github.com/thunderbird/thunderbird-android/assets/77849217/115b54ce-ec05-4e7c-aeeb-6f1d20fcf130)

author_association: NONE
user: login: bernhard-fp
created_at: 2023-11-11T17:55:57Z
body: Ah ok, thank you. I can confirm that it might be possible, because I have seen that the google messages app has a transparent navigation bar background. 
I checked most of my apps and it seems to be the only one with this feature.
But I will check if it is possible to change that programmatically by app.
author_association: NONE
user: login: imadhavb
created_at: 2025-02-19T00:50:30Z
body: Any update on this? Should be able to use this: https://developer.android.com/develop/ui/views/layout/edge-to-edge
author_association: NONE
user: login: kewisch
created_at: 2025-02-19T12:24:05Z
body: We have #8747 to work on edge to edge support, this might "fix it" as a side-effect. This specifically isn't an issue we're prioritizing, but if someone wants to look into it the support is welcome.
author_association: MEMBER
user: login: wmontwe
created_at: 2025-03-19T11:38:49Z
body: @kewisch this doesn't fix the edge-to-edge support but moves us a good bit further.
author_association: MEMBER

Diff:
diff --git a/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SystemBar.kt b/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SystemBar.kt
index 9648b3e24d..d4220e6d42 100644
--- a/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SystemBar.kt
+++ b/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SystemBar.kt
@@ -1,6 +1,7 @@
 package app.k9mail.core.ui.compose.theme2
 
 import android.app.Activity
+import android.graphics.Color
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.SideEffect
 import androidx.compose.ui.graphics.toArgb
@@ -17,7 +18,7 @@ fun SystemBar(
         SideEffect {
             val window = (view.context as Activity).window
             window.statusBarColor = colorScheme.surfaceContainer.toArgb()
-            window.navigationBarColor = colorScheme.surfaceContainer.toArgb()
+            window.navigationBarColor = Color.TRANSPARENT
             WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
         }
     }
diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt
index c2e37e7a5c..2b0490c11d 100644
--- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt
+++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt
@@ -3,12 +3,20 @@ package app.k9mail.feature.navigation.drawer.ui
 import androidx.compose.animation.AnimatedVisibility
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.displayCutout
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.statusBars
 import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.dp
 import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
@@ -29,9 +37,12 @@ internal fun DrawerContent(
     onEvent: (Event) -> Unit,
     modifier: Modifier = Modifier,
 ) {
+    val additionalWidth = getAdditionalWidth()
+
     Surface(
         modifier = modifier
-            .width(DRAWER_WIDTH)
+            .windowInsetsPadding(WindowInsets.statusBars)
+            .width(DRAWER_WIDTH + additionalWidth)
             .fillMaxHeight()
             .testTag("DrawerContent"),
     ) {
@@ -83,3 +94,19 @@ internal fun DrawerContent(
         }
     }
 }
+
+@Composable
+fun getAdditionalWidth(): Dp {
+    val density = LocalDensity.current
+    val layoutDirection = LocalLayoutDirection.current
+    val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
+
+    return if (isRtl) {
+        WindowInsets.displayCutout.getRight(density = density, layoutDirection = layoutDirection)
+    } else {
+        WindowInsets.displayCutout.getLeft(density = density, layoutDirection = layoutDirection)
+    }.pxToDp()
+}
+
+@Composable
+fun Int.pxToDp() = with(LocalDensity.current) { this@pxToDp.toDp() }
diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt
index f08a871baf..2e1a6a83dc 100644
--- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt
+++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt
@@ -3,10 +3,13 @@ package app.k9mail.feature.navigation.drawer.ui.account
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.navigationBars
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
 import androidx.compose.runtime.Composable
@@ -34,9 +37,13 @@ internal fun AccountList(
         modifier = modifier,
         color = MainTheme.colors.surfaceContainer,
     ) {
+        val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+
         Column(
             modifier = Modifier
                 .fillMaxHeight()
+                .windowInsetsPadding(WindowInsets.navigationBars)
+                .windowInsetsPadding(horizontalInsetPadding)
                 .width(MainTheme.sizes.large),
         ) {
             LazyColumn(
diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountView.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountView.kt
index 0937789be7..85c6198b07 100644
--- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountView.kt
+++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountView.kt
@@ -7,15 +7,22 @@ import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.IntrinsicSize
 import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.WindowInsetsSides
 import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.displayCutout
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.only
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium
@@ -40,8 +47,12 @@ internal fun AccountView(
                 color = MainTheme.colors.surfaceContainer,
                 modifier = Modifier.fillMaxHeight(),
             ) {
+                val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+
                 Box(
-                    modifier = Modifier.width(MainTheme.sizes.large),
+                    modifier = Modifier
+                        .windowInsetsPadding(horizontalInsetPadding)
+                        .width(MainTheme.sizes.large),
                     contentAlignment = Alignment.Center,
                 ) {
                     AccountAvatar(
@@ -89,3 +100,9 @@ internal fun AccountView(
         }
     }
 }
+
+@Composable
+fun getDisplayCutOutHorizontalInsetPadding(): WindowInsets {
+    val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
+    return WindowInsets.displayCutout.only(if (isRtl) WindowInsetsSides.Right else WindowInsetsSides.Left)
+}
diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/setting/SettingList.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/setting/SettingList.kt
index 71cf8d33f3..a7b0c1c1ff 100644
--- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/setting/SettingList.kt
+++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/setting/SettingList.kt
@@ -1,8 +1,11 @@
 package app.k9mail.feature.navigation.drawer.ui.setting
 
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.navigationBars
 import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.res.stringResource
@@ -20,6 +23,7 @@ internal fun SettingList(
     Column(
         modifier = modifier
             .padding(vertical = MainTheme.spacings.default)
+            .windowInsetsPadding(WindowInsets.navigationBars)
             .fillMaxWidth(),
     ) {
         SettingListItem(
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 93b1cb4458..9e4c6b5dcf 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
@@ -12,9 +12,14 @@ import android.view.MenuItem
 import android.view.View
 import android.view.animation.AnimationUtils
 import android.widget.ProgressBar
+import androidx.activity.enableEdgeToEdge
 import androidx.appcompat.app.ActionBar
 import androidx.appcompat.view.ActionMode
 import androidx.appcompat.widget.SearchView
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat.Type.displayCutout
+import androidx.core.view.WindowInsetsCompat.Type.navigationBars
+import androidx.core.view.WindowInsetsCompat.Type.systemBars
 import androidx.core.view.isGone
 import androidx.drawerlayout.widget.DrawerLayout
 import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
@@ -134,6 +139,8 @@ open class MessageList :
     public override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        enableEdgeToEdge()
+
         // If the app's main task was not created using the default launch intent (e.g. from a notification, a widget,
         // or a shortcut), using the app icon to "launch" the app will create a new MessageList instance instead of only
         // bringing the app's task to the foreground. We catch this situation here and simply finish the activity. This
@@ -189,6 +196,46 @@ open class MessageList :
         initializeFragments()
         displayViews()
         initializeFunding()
+        initializeInsets()
+    }
+
+    private fun initializeInsets() {
+        initializeDrawerContentInsets()
+        initializeToolbarInsets()
+        initializeContainerInsets()
+    }
+
+    private fun initializeToolbarInsets() {
+        val toolbar = findViewById<View>(R.id.toolbar)
+
+        ViewCompat.setOnApplyWindowInsetsListener(toolbar) { v, windowsInsets ->
+            val insets = windowsInsets.getInsets(systemBars() or displayCutout())
+            v.setPadding(insets.left, 0, insets.right, 0)
+
+            windowsInsets
+        }
+    }
+
+    private fun initializeContainerInsets() {
+        val container = findViewById<View>(R.id.container)
+
+        ViewCompat.setOnApplyWindowInsetsListener(container) { v, windowsInsets ->
+            val insets = windowsInsets.getInsets(displayCutout() or navigationBars())
+            v.setPadding(insets.left, 0, insets.right, 0)
+
+            windowsInsets
+        }
+    }
+
+    private fun initializeDrawerContentInsets() {
+        val toolbar = findViewById<View>(R.id.drawer_content)
+
+        ViewCompat.setOnApplyWindowInsetsListener(toolbar) { v, windowsInsets ->
+            val insets = windowsInsets.getInsets(systemBars() or displayCutout())
+            v.setPadding(0, insets.top, 0, 0)
+
+            windowsInsets
+        }
     }
 
     private fun initializeFunding() {
diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt
index 00edf59c6a..a71e453f14 100644
--- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt
+++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt
@@ -16,9 +16,13 @@ import androidx.annotation.StringRes
 import androidx.appcompat.view.ActionMode
 import androidx.core.os.BundleCompat
 import androidx.core.os.bundleOf
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat.Type.navigationBars
+import androidx.core.view.WindowInsetsCompat.Type.systemBars
 import androidx.core.view.isGone
 import androidx.core.view.isVisible
 import androidx.core.view.setPadding
+import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.Observer
 import androidx.recyclerview.widget.RecyclerView
@@ -296,6 +300,19 @@ class MessageListFragment :
         initializeSortSettings()
 
         loadMessageList()
+
+        initializeInsets(view)
+    }
+
+    private fun initializeInsets(view: View) {
+        val messageList = view.findViewById<View>(R.id.message_list)
+
+        ViewCompat.setOnApplyWindowInsetsListener(messageList) { v, windowsInsets ->
+            val insets = windowsInsets.getInsets(navigationBars())
+            v.setPadding(0, 0, 0, insets.bottom)
+
+            windowsInsets
+        }
     }
 
     private fun initializeSwipeRefreshLayout(view: View) {
@@ -320,6 +337,26 @@ class MessageListFragment :
         } else {
             disableFloatingActionButton(view)
         }
+
+        initializeFloatingActionButtonInsets(view)
+    }
+
+    private fun initializeFloatingActionButtonInsets(view: View) {
+        val floatingActionButton = view.findViewById<FloatingActionButton>(R.id.floating_action_button)
+
+        ViewCompat.setOnApplyWindowInsetsListener(floatingActionButton) { v, windowInsets ->
+            val insets = windowInsets.getInsets(systemBars())
+
+            v.updateLayoutParams<ViewGroup.MarginLayoutParams> {
+                val fabMargin = view.resources.getDimensionPixelSize(R.dimen.floatingActionButtonMargin)
+
+                bottomMargin = fabMargin + insets.bottom
+                rightMargin = fabMargin + insets.right
+                leftMargin = fabMargin + insets.left
+            }
+
+            windowInsets
+        }
     }
 
     private fun enableFloatingActionButton(view: View) {
diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewFragment.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewFragment.kt
index 8178278dc2..21078ba3f7 100644
--- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewFragment.kt
+++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewFragment.kt
@@ -21,6 +21,8 @@ import android.widget.Toast
 import androidx.activity.result.ActivityResultLauncher
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat.Type.navigationBars
 import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.setFragmentResultListener
@@ -185,6 +187,19 @@ class MessageViewFragment :
         messageTopView.setOnDownloadButtonClickListener {
             onDownloadButtonClicked()
         }
+
+        initializeMessageTopViewInsets(messageTopView)
+    }
+
+    private fun initializeMessageTopViewInsets(messageTopView: MessageTopView) {
+        val view = messageTopView.findViewById<View>(R.id.message_container)
+
+        ViewCompat.setOnApplyWindowInsetsListener(view) { v, windowsInsets ->
+            val insets = windowsInsets.getInsets(navigationBars())
+            v.setPadding(0, 0, 0, insets.bottom)
+
+            windowsInsets
+        }
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
diff --git a/legacy/ui/legacy/src/main/res/layout/message_list.xml b/legacy/ui/legacy/src/main/res/layout/message_list.xml
index cf27687bd1..d3a3a8e6bd 100644
--- a/legacy/ui/legacy/src/main/res/layout/message_list.xml
+++ b/legacy/ui/legacy/src/main/res/layout/message_list.xml
@@ -9,6 +9,7 @@
     >
 
     <RelativeLayout
+        android:id="@+id/drawer_content"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical"
diff --git a/legacy/ui/legacy/src/main/res/layout/split_message_list.xml b/legacy/ui/legacy/src/main/res/layout/split_message_list.xml
index 4462f08e4e..8250d14dbe 100644
--- a/legacy/ui/legacy/src/main/res/layout/split_message_list.xml
+++ b/legacy/ui/legacy/src/main/res/layout/split_message_list.xml
@@ -9,6 +9,7 @@
     >
 
     <RelativeLayout
+        android:id="@+id/drawer_content"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical"


Reviews:
user: login: wmontwe
body: Thank you, works very good, just RTL support is missing.
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-03-18T10:54:59Z
user: login: wmontwe
body: Thank you!
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-19T10:52:09Z

Review comments:
diff_hunk: @@ -320,6 +337,25 @@ class MessageListFragment :
         } else {
             disableFloatingActionButton(view)
         }
+
+        initializeFloatingActionButtonInsets(view)
+    }
+
+    private fun initializeFloatingActionButtonInsets(view: View) {
+        val floatingActionButton = view.findViewById<FloatingActionButton>(R.id.floating_action_button)
+
+        ViewCompat.setOnApplyWindowInsetsListener(floatingActionButton) { v, windowInsets ->
+            val insets = windowInsets.getInsets(systemBars())
+
+            v.updateLayoutParams<ViewGroup.MarginLayoutParams> {
+                val fabMargin = view.resources.getDimensionPixelSize(R.dimen.floatingActionButtonMargin)
+
+                bottomMargin = fabMargin + insets.bottom
path: legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt
user: login: wmontwe
body: For RTL support please also add leftMargin.
created_at: 2025-03-18T10:35:53Z
author_association: MEMBER
diff_hunk: @@ -29,9 +36,12 @@ internal fun DrawerContent(
     onEvent: (Event) -> Unit,
     modifier: Modifier = Modifier,
 ) {
+    val leftInset = getLeftInset()
path: feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt
user: login: wmontwe
body: I guess for RTL support we need to add the right inset too.
created_at: 2025-03-18T10:53:29Z
author_association: MEMBER
diff_hunk: @@ -37,6 +43,8 @@ internal fun AccountList(
         Column(
             modifier = Modifier
                 .fillMaxHeight()
+                .windowInsetsPadding(WindowInsets.navigationBars)
+                .windowInsetsPadding(WindowInsets.displayCutout.only(WindowInsetsSides.Left))
path: feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt
user: login: wmontwe
body: RTL support, rigth too.
created_at: 2025-03-18T10:54:11Z
author_association: MEMBER
diff_hunk: @@ -41,7 +46,9 @@ internal fun AccountView(
                 modifier = Modifier.fillMaxHeight(),
             ) {
                 Box(
-                    modifier = Modifier.width(MainTheme.sizes.large),
+                    modifier = Modifier
path: feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountView.kt
user: login: wmontwe
body: RTL support, right too.
created_at: 2025-03-18T10:54:23Z
author_association: MEMBER

PR comments:
user: login: Smatek
created_at: 2025-03-18T19:41:20Z
body: @wmontwe  I'm glad it's working well for you. I've now added RTL support—let me know if you need any further adjustments. 😊
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-03-19T11:39:25Z
body: Thanks for your contribution! Your pull request has been merged and will be part of Thunderbird 11. We appreciate the time and effort you put into improving Thunderbird. If you haven’t already, you’re welcome to join our Matrix chat for contributors. It’s where we discuss development and help each other out. https://matrix.to/#/#tb-android-dev:mozilla.org
Hope to see you there! 🚀📱🐦
author_association: CONTRIBUTOR