Skip to content

Commit 179ae25

Browse files
authored
Merge branch 'main' into system_bar_snippets
2 parents 049ff94 + bd170b9 commit 179ae25

File tree

2 files changed

+64
-46
lines changed

2 files changed

+64
-46
lines changed

compose/snippets/src/main/java/com/example/compose/snippets/components/SwipeToDismissBox.kt

Lines changed: 36 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ data class TodoItem(
7777
// [START android_compose_components_swipeitem]
7878
@Composable
7979
fun SwipeItem(
80-
value: TodoItem,
80+
todoItem: TodoItem,
8181
startToEndAction: (TodoItem) -> Unit,
8282
endToStartAction: (TodoItem) -> Unit,
8383
modifier: Modifier = Modifier,
@@ -87,12 +87,12 @@ fun SwipeItem(
8787
confirmValueChange = {
8888
when (it) {
8989
SwipeToDismissBoxValue.StartToEnd -> {
90-
startToEndAction(value)
90+
startToEndAction(todoItem)
9191
// Do not dismiss this item.
9292
false
9393
}
9494
SwipeToDismissBoxValue.EndToStart -> {
95-
endToStartAction(value)
95+
endToStartAction(todoItem)
9696
true
9797
}
9898
SwipeToDismissBoxValue.Settled -> {
@@ -104,8 +104,7 @@ fun SwipeItem(
104104

105105
SwipeToDismissBox(
106106
state = swipeToDismissBoxState,
107-
modifier = modifier
108-
.fillMaxSize(),
107+
modifier = modifier.fillMaxSize(),
109108
backgroundContent = {
110109
Row(
111110
modifier = Modifier
@@ -128,23 +127,20 @@ fun SwipeItem(
128127
) {
129128
when (swipeToDismissBoxState.dismissDirection) {
130129
SwipeToDismissBoxValue.StartToEnd -> {
131-
if (value.isItemDone) {
132-
Icon(
133-
imageVector = Icons.Default.CheckBox,
134-
contentDescription = "Item done",
135-
tint = Color.White,
136-
modifier = Modifier
137-
.padding(12.dp)
138-
)
130+
val icon = if (todoItem.isItemDone) {
131+
Icons.Default.CheckBox
139132
} else {
140-
Icon(
141-
imageVector = Icons.Default.CheckBoxOutlineBlank,
142-
contentDescription = "Item not done",
143-
tint = Color.White,
144-
modifier = Modifier
145-
.padding(12.dp)
146-
)
133+
Icons.Default.CheckBoxOutlineBlank
147134
}
135+
136+
val contentDescription = if (todoItem.isItemDone) "Done" else "Not done"
137+
138+
Icon(
139+
icon,
140+
contentDescription,
141+
Modifier.padding(12.dp),
142+
tint = Color.White
143+
)
148144
}
149145

150146
SwipeToDismissBoxValue.EndToStart -> {
@@ -153,8 +149,7 @@ fun SwipeItem(
153149
imageVector = Icons.Default.Delete,
154150
contentDescription = "Remove item",
155151
tint = Color.White,
156-
modifier = Modifier
157-
.padding(12.dp)
152+
modifier = Modifier.padding(12.dp)
158153
)
159154
}
160155

@@ -163,7 +158,7 @@ fun SwipeItem(
163158
}
164159
}
165160
) {
166-
content(value)
161+
content(todoItem)
167162
}
168163
}
169164
// [END android_compose_components_swipeitem]
@@ -187,7 +182,7 @@ private fun SwipeItemExample() {
187182
key = { it.itemDescription }
188183
) { todoItem ->
189184
SwipeItem(
190-
value = todoItem,
185+
todoItem = todoItem,
191186
startToEndAction = {
192187
todoItem.isItemDone = !todoItem.isItemDone
193188
},
@@ -208,23 +203,24 @@ private fun SwipeItemExample() {
208203
// [START android_compose_components_swipecarditem]
209204
@Composable
210205
fun SwipeCardItem(
211-
value: TodoItem,
206+
todoItem: TodoItem,
212207
startToEndAction: (TodoItem) -> Unit,
213208
endToStartAction: (TodoItem) -> Unit,
214209
modifier: Modifier = Modifier,
215210
content: @Composable (TodoItem) -> Unit
216211
) {
212+
// [START_EXCLUDE]
217213
val swipeToDismissState = rememberSwipeToDismissBoxState(
218214
positionalThreshold = { totalDistance -> totalDistance * 0.25f },
219215
confirmValueChange = {
220216
when (it) {
221217
SwipeToDismissBoxValue.StartToEnd -> {
222-
startToEndAction(value)
218+
startToEndAction(todoItem)
223219
// Do not dismiss this item.
224220
false
225221
}
226222
SwipeToDismissBoxValue.EndToStart -> {
227-
endToStartAction(value)
223+
endToStartAction(todoItem)
228224
true
229225
}
230226
SwipeToDismissBoxValue.Settled -> {
@@ -234,6 +230,7 @@ fun SwipeCardItem(
234230
}
235231
)
236232

233+
// [END_EXCLUDE]
237234
SwipeToDismissBox(
238235
modifier = Modifier,
239236
state = swipeToDismissState,
@@ -250,6 +247,7 @@ fun SwipeCardItem(
250247
},
251248
label = "swipeable card item background color"
252249
)
250+
// [START_EXCLUDE]
253251
Row(
254252
modifier = Modifier
255253
.background(color)
@@ -259,23 +257,15 @@ fun SwipeCardItem(
259257
) {
260258
when (swipeToDismissState.dismissDirection) {
261259
SwipeToDismissBoxValue.StartToEnd -> {
262-
if (value.isItemDone) {
263-
Icon(
264-
imageVector = Icons.Default.CheckBox,
265-
contentDescription = "Item done",
266-
tint = Color.White,
267-
modifier = Modifier
268-
.padding(12.dp)
269-
)
260+
val icon = if (todoItem.isItemDone) {
261+
Icons.Default.CheckBox
270262
} else {
271-
Icon(
272-
imageVector = Icons.Default.CheckBoxOutlineBlank,
273-
contentDescription = "Item not done",
274-
tint = Color.White,
275-
modifier = Modifier
276-
.padding(12.dp)
277-
)
263+
Icons.Default.CheckBoxOutlineBlank
278264
}
265+
266+
val contentDescription = if (todoItem.isItemDone) "Done" else "Not done"
267+
268+
Icon(icon, contentDescription, Modifier.padding(12.dp), tint = Color.White)
279269
}
280270

281271
SwipeToDismissBoxValue.EndToStart -> {
@@ -284,8 +274,7 @@ fun SwipeCardItem(
284274
imageVector = Icons.Default.Delete,
285275
contentDescription = "Remove item",
286276
tint = Color.White,
287-
modifier = Modifier
288-
.padding(12.dp)
277+
modifier = Modifier.padding(12.dp)
289278
)
290279
}
291280

@@ -294,8 +283,9 @@ fun SwipeCardItem(
294283
}
295284
}
296285
) {
297-
content(value)
286+
content(todoItem)
298287
}
288+
// [END_EXCLUDE]
299289
}
300290
// [END android_compose_components_swipecarditem]
301291

@@ -318,7 +308,7 @@ private fun SwipeCardItemExample() {
318308
key = { it.itemDescription }
319309
) { todoItem ->
320310
SwipeCardItem(
321-
value = todoItem,
311+
todoItem = todoItem,
322312
startToEndAction = {
323313
todoItem.isItemDone = !todoItem.isItemDone
324314
},

compose/snippets/src/main/java/com/example/compose/snippets/glance/GlanceSnippets.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import androidx.compose.runtime.remember
3939
import androidx.compose.runtime.rememberCoroutineScope
4040
import androidx.compose.runtime.setValue
4141
import androidx.compose.ui.graphics.Color
42+
import androidx.compose.ui.unit.Dp
4243
import androidx.compose.ui.unit.DpSize
4344
import androidx.compose.ui.unit.dp
4445
import androidx.glance.Button
@@ -69,6 +70,7 @@ import androidx.glance.appwidget.action.ActionCallback
6970
import androidx.glance.appwidget.action.actionRunCallback
7071
import androidx.glance.appwidget.action.actionSendBroadcast
7172
import androidx.glance.appwidget.action.actionStartService
73+
import androidx.glance.appwidget.cornerRadius
7274
import androidx.glance.appwidget.provideContent
7375
import androidx.glance.appwidget.updateAll
7476
import androidx.glance.appwidget.updateIf
@@ -868,6 +870,32 @@ object GlanceTheming {
868870
}
869871
}
870872

873+
object GlanceInnerPadding {
874+
875+
// [START android_compose_glance_innercornerradius]
876+
/**
877+
* Applies corner radius for views that are visually positioned [widgetPadding]dp inside of the
878+
* widget background.
879+
*/
880+
@Composable
881+
fun GlanceModifier.appWidgetInnerCornerRadius(widgetPadding: Dp): GlanceModifier {
882+
883+
if (Build.VERSION.SDK_INT < 31) {
884+
return this
885+
}
886+
887+
val resources = LocalContext.current.resources
888+
// get dimension in float (without rounding).
889+
val px = resources.getDimension(android.R.dimen.system_app_widget_background_radius)
890+
val widgetBackgroundRadiusDpValue = px / resources.displayMetrics.density
891+
if (widgetBackgroundRadiusDpValue < widgetPadding.value) {
892+
return this
893+
}
894+
return this.cornerRadius(Dp(widgetBackgroundRadiusDpValue - widgetPadding.value))
895+
}
896+
// [END android_compose_glance_innercornerradius]
897+
}
898+
871899
object GlanceInteroperability {
872900
@Composable
873901
fun example01() {

0 commit comments

Comments
 (0)