1
1
package com.x8bit.bitwarden.ui.platform.components.appbar.action
2
2
3
+ import androidx.annotation.DrawableRes
3
4
import androidx.compose.foundation.layout.Box
4
5
import androidx.compose.foundation.layout.widthIn
5
6
import androidx.compose.material3.DropdownMenu
@@ -14,6 +15,7 @@ import androidx.compose.runtime.setValue
14
15
import androidx.compose.ui.Alignment
15
16
import androidx.compose.ui.ExperimentalComposeUiApi
16
17
import androidx.compose.ui.Modifier
18
+ import androidx.compose.ui.graphics.Color
17
19
import androidx.compose.ui.platform.testTag
18
20
import androidx.compose.ui.res.stringResource
19
21
import androidx.compose.ui.semantics.semantics
@@ -22,6 +24,7 @@ import androidx.compose.ui.tooling.preview.Preview
22
24
import androidx.compose.ui.unit.DpOffset
23
25
import androidx.compose.ui.unit.dp
24
26
import com.x8bit.bitwarden.R
27
+ import com.x8bit.bitwarden.ui.platform.base.util.nullableTestTag
25
28
import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors
26
29
import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
27
30
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
@@ -41,8 +44,11 @@ import kotlinx.collections.immutable.persistentListOf
41
44
@OptIn(ExperimentalComposeUiApi ::class )
42
45
@Composable
43
46
fun BitwardenOverflowActionItem (
47
+ menuItemDataList : ImmutableList <OverflowMenuItemData >,
44
48
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 ",
46
52
) {
47
53
if (menuItemDataList.isEmpty()) return
48
54
var isOverflowMenuVisible by rememberSaveable { mutableStateOf(false ) }
@@ -51,10 +57,10 @@ fun BitwardenOverflowActionItem(
51
57
modifier = modifier,
52
58
) {
53
59
BitwardenStandardIconButton (
54
- vectorIconRes = R .drawable.ic_ellipsis_vertical ,
55
- contentDescription = stringResource(id = R .string.more) ,
60
+ vectorIconRes = vectorIconRes ,
61
+ contentDescription = contentDescription ,
56
62
onClick = { isOverflowMenuVisible = ! isOverflowMenuVisible },
57
- modifier = Modifier .testTag (tag = " HeaderBarOptionsButton " ),
63
+ modifier = Modifier .nullableTestTag (tag = testTag ),
58
64
)
59
65
DropdownMenu (
60
66
shape = BitwardenTheme .shapes.menu,
@@ -73,7 +79,13 @@ fun BitwardenOverflowActionItem(
73
79
menuItemDataList.forEach { dropdownMenuItemData ->
74
80
DropdownMenuItem (
75
81
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,
77
89
text = {
78
90
Text (
79
91
text = dropdownMenuItemData.text,
@@ -112,8 +124,12 @@ private fun BitwardenOverflowActionItem_preview() {
112
124
*
113
125
* @param text The text displayed for the item in the menu.
114
126
* @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.
115
129
*/
116
130
data class OverflowMenuItemData (
117
131
val text : String ,
118
132
val onClick : () -> Unit ,
133
+ val isEnabled : Boolean = true ,
134
+ val color : Color = Color .Unspecified ,
119
135
)
0 commit comments