14
14
* limitations under the License.
15
15
*/
16
16
17
+ @file:OptIn(ExperimentalFoundationApi ::class )
18
+
17
19
package com.google.android.horologist.compose.material
18
20
19
21
import androidx.annotation.DrawableRes
22
+ import androidx.compose.foundation.ExperimentalFoundationApi
23
+ import androidx.compose.foundation.combinedClickable
24
+ import androidx.compose.foundation.interaction.MutableInteractionSource
25
+ import androidx.compose.foundation.layout.Box
26
+ import androidx.compose.foundation.layout.fillMaxSize
20
27
import androidx.compose.foundation.layout.size
28
+ import androidx.compose.foundation.shape.CircleShape
21
29
import androidx.compose.runtime.Composable
30
+ import androidx.compose.runtime.remember
22
31
import androidx.compose.ui.Alignment
23
32
import androidx.compose.ui.Modifier
33
+ import androidx.compose.ui.draw.clip
24
34
import androidx.compose.ui.graphics.vector.ImageVector
35
+ import androidx.compose.ui.semantics.Role
25
36
import androidx.compose.ui.unit.Dp
26
37
import androidx.wear.compose.material.Button
27
38
import androidx.wear.compose.material.ButtonColors
@@ -49,6 +60,8 @@ public fun Button(
49
60
contentDescription : String ,
50
61
onClick : () -> Unit ,
51
62
modifier : Modifier = Modifier ,
63
+ onLongClick : (() -> Unit )? = null,
64
+ onDoubleClick : (() -> Unit )? = null,
52
65
colors : ButtonColors = ButtonDefaults .primaryButtonColors(),
53
66
buttonSize : ButtonSize = ButtonSize .Default ,
54
67
iconRtlMode : IconRtlMode = IconRtlMode .Default ,
@@ -58,6 +71,8 @@ public fun Button(
58
71
icon = ImageVectorPaintable (imageVector),
59
72
contentDescription = contentDescription,
60
73
onClick = onClick,
74
+ onLongClick = onLongClick,
75
+ onDoubleClick = onDoubleClick,
61
76
modifier = modifier,
62
77
colors = colors,
63
78
buttonSize = buttonSize,
@@ -78,6 +93,8 @@ public fun Button(
78
93
contentDescription : String ,
79
94
onClick : () -> Unit ,
80
95
modifier : Modifier = Modifier ,
96
+ onLongClick : (() -> Unit )? = null,
97
+ onDoubleClick : (() -> Unit )? = null,
81
98
colors : ButtonColors = ButtonDefaults .primaryButtonColors(),
82
99
buttonSize : ButtonSize = ButtonSize .Default ,
83
100
iconRtlMode : IconRtlMode = IconRtlMode .Default ,
@@ -87,6 +104,8 @@ public fun Button(
87
104
icon = DrawableResPaintable (id),
88
105
contentDescription = contentDescription,
89
106
onClick = onClick,
107
+ onLongClick = onLongClick,
108
+ onDoubleClick = onDoubleClick,
90
109
modifier = modifier,
91
110
colors = colors,
92
111
buttonSize = buttonSize,
@@ -102,27 +121,46 @@ internal fun Button(
102
121
contentDescription : String ,
103
122
onClick : () -> Unit ,
104
123
modifier : Modifier = Modifier ,
124
+ onLongClick : (() -> Unit )? = null,
125
+ onDoubleClick : (() -> Unit )? = null,
105
126
colors : ButtonColors = ButtonDefaults .primaryButtonColors(),
106
127
buttonSize : ButtonSize = ButtonSize .Default ,
107
128
iconRtlMode : IconRtlMode = IconRtlMode .Default ,
108
129
enabled : Boolean = true,
109
130
) {
131
+ val interactionSource = remember { MutableInteractionSource () }
110
132
Button (
111
133
onClick = onClick,
112
134
modifier = modifier.size(buttonSize.tapTargetSize),
113
135
enabled = enabled,
114
136
colors = colors,
137
+ interactionSource = interactionSource,
115
138
) {
116
- val iconModifier = Modifier
117
- .size(buttonSize.iconSize)
118
- .align(Alignment .Center )
139
+ Box (
140
+ modifier = Modifier
141
+ .fillMaxSize()
142
+ .clip(CircleShape )
143
+ .combinedClickable(
144
+ interactionSource = interactionSource,
145
+ indication = null , // From material Button
146
+ enabled = enabled,
147
+ onClick = onClick,
148
+ onLongClick = onLongClick,
149
+ onDoubleClick = onDoubleClick,
150
+ role = Role .Button ,
151
+ ),
152
+ ) {
153
+ val iconModifier = Modifier
154
+ .size(buttonSize.iconSize)
155
+ .align(Alignment .Center )
119
156
120
- Icon (
121
- paintable = icon,
122
- contentDescription = contentDescription,
123
- modifier = iconModifier,
124
- rtlMode = iconRtlMode,
125
- )
157
+ Icon (
158
+ paintable = icon,
159
+ contentDescription = contentDescription,
160
+ modifier = iconModifier,
161
+ rtlMode = iconRtlMode,
162
+ )
163
+ }
126
164
}
127
165
}
128
166
0 commit comments