Skip to content

Commit bf1ed69

Browse files
PM-20005: Make the BitwardenOverflowActionItem more generic (#5011)
1 parent a12f325 commit bf1ed69

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

app/src/main/java/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt

+21-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.x8bit.bitwarden.ui.platform.components.appbar.action
22

3+
import androidx.annotation.DrawableRes
34
import androidx.compose.foundation.layout.Box
45
import androidx.compose.foundation.layout.widthIn
56
import androidx.compose.material3.DropdownMenu
@@ -14,6 +15,7 @@ import androidx.compose.runtime.setValue
1415
import androidx.compose.ui.Alignment
1516
import androidx.compose.ui.ExperimentalComposeUiApi
1617
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.graphics.Color
1719
import androidx.compose.ui.platform.testTag
1820
import androidx.compose.ui.res.stringResource
1921
import androidx.compose.ui.semantics.semantics
@@ -22,6 +24,7 @@ import androidx.compose.ui.tooling.preview.Preview
2224
import androidx.compose.ui.unit.DpOffset
2325
import androidx.compose.ui.unit.dp
2426
import com.x8bit.bitwarden.R
27+
import com.x8bit.bitwarden.ui.platform.base.util.nullableTestTag
2528
import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors
2629
import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
2730
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
@@ -41,8 +44,11 @@ import kotlinx.collections.immutable.persistentListOf
4144
@OptIn(ExperimentalComposeUiApi::class)
4245
@Composable
4346
fun BitwardenOverflowActionItem(
47+
menuItemDataList: ImmutableList<OverflowMenuItemData>,
4448
modifier: Modifier = Modifier,
45-
menuItemDataList: ImmutableList<OverflowMenuItemData> = persistentListOf(),
49+
@DrawableRes vectorIconRes: Int = R.drawable.ic_ellipsis_vertical,
50+
contentDescription: String = stringResource(id = R.string.more),
51+
testTag: String? = "HeaderBarOptionsButton",
4652
) {
4753
if (menuItemDataList.isEmpty()) return
4854
var isOverflowMenuVisible by rememberSaveable { mutableStateOf(false) }
@@ -51,10 +57,10 @@ fun BitwardenOverflowActionItem(
5157
modifier = modifier,
5258
) {
5359
BitwardenStandardIconButton(
54-
vectorIconRes = R.drawable.ic_ellipsis_vertical,
55-
contentDescription = stringResource(id = R.string.more),
60+
vectorIconRes = vectorIconRes,
61+
contentDescription = contentDescription,
5662
onClick = { isOverflowMenuVisible = !isOverflowMenuVisible },
57-
modifier = Modifier.testTag(tag = "HeaderBarOptionsButton"),
63+
modifier = Modifier.nullableTestTag(tag = testTag),
5864
)
5965
DropdownMenu(
6066
shape = BitwardenTheme.shapes.menu,
@@ -73,7 +79,13 @@ fun BitwardenOverflowActionItem(
7379
menuItemDataList.forEach { dropdownMenuItemData ->
7480
DropdownMenuItem(
7581
modifier = Modifier.testTag("FloatingOptionsItem"),
76-
colors = bitwardenMenuItemColors(),
82+
colors = bitwardenMenuItemColors(
83+
textColor = dropdownMenuItemData
84+
.color
85+
.takeUnless { it == Color.Unspecified }
86+
?: BitwardenTheme.colorScheme.text.primary,
87+
),
88+
enabled = dropdownMenuItemData.isEnabled,
7789
text = {
7890
Text(
7991
text = dropdownMenuItemData.text,
@@ -112,8 +124,12 @@ private fun BitwardenOverflowActionItem_preview() {
112124
*
113125
* @param text The text displayed for the item in the menu.
114126
* @param onClick A callback for when the menu item is clicked.
127+
* @param isEnabled Indicates that this overflow item is enabled or not.
128+
* @param color The color of the content.
115129
*/
116130
data class OverflowMenuItemData(
117131
val text: String,
118132
val onClick: () -> Unit,
133+
val isEnabled: Boolean = true,
134+
val color: Color = Color.Unspecified,
119135
)

app/src/main/java/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ package com.x8bit.bitwarden.ui.platform.components.appbar.color
22

33
import androidx.compose.material3.MenuItemColors
44
import androidx.compose.runtime.Composable
5+
import androidx.compose.ui.graphics.Color
56
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
67

78
/**
89
* Provides a default set of Bitwarden-styled colors for menu items.
910
*/
1011
@Composable
11-
fun bitwardenMenuItemColors(): MenuItemColors = MenuItemColors(
12-
textColor = BitwardenTheme.colorScheme.text.primary,
12+
fun bitwardenMenuItemColors(
13+
textColor: Color = BitwardenTheme.colorScheme.text.primary,
14+
): MenuItemColors = MenuItemColors(
15+
textColor = textColor,
1316
leadingIconColor = BitwardenTheme.colorScheme.icon.primary,
1417
trailingIconColor = BitwardenTheme.colorScheme.icon.primary,
1518
disabledTextColor = BitwardenTheme.colorScheme.filledButton.foregroundDisabled,

0 commit comments

Comments
 (0)