diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt
new file mode 100644
index 000000000..59727c71b
--- /dev/null
+++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.compose.snippets.components
+
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.collectIsPressedAsState
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.tooling.preview.Preview
+import com.example.compose.snippets.R
+import kotlinx.coroutines.delay
+
+// [START android_compose_components_togglebuttonexample]
+@Preview
+@Composable
+fun ToggleIconButtonExample() {
+ // isToggled initial value should be read from a view model or persistent storage.
+ var isToggled by rememberSaveable { mutableStateOf(false) }
+
+ IconButton(
+ onClick = { isToggled = !isToggled }
+ ) {
+ Icon(
+ painter = if (isToggled) painterResource(R.drawable.favorite_filled) else painterResource(R.drawable.favorite),
+ contentDescription = if (isToggled) "Selected icon button" else "Unselected icon button."
+ )
+ }
+}
+// [END android_compose_components_togglebuttonexample]
+
+// [START android_compose_components_iconbutton]
+@Composable
+fun MomentaryIconButton(
+ unselectedImage: Int,
+ selectedImage: Int,
+ contentDescription: String,
+ modifier: Modifier = Modifier,
+ stepDelay: Long = 100L, // Minimum value is 1L milliseconds.
+ onClick: () -> Unit
+) {
+ val interactionSource = remember { MutableInteractionSource() }
+ val isPressed by interactionSource.collectIsPressedAsState()
+ val pressedListener by rememberUpdatedState(onClick)
+
+ LaunchedEffect(isPressed) {
+ while (isPressed) {
+ delay(stepDelay.coerceIn(1L, Long.MAX_VALUE))
+ pressedListener()
+ }
+ }
+
+ IconButton(
+ modifier = modifier,
+ onClick = onClick,
+ interactionSource = interactionSource
+ ) {
+ Icon(
+ painter = if (isPressed) painterResource(id = selectedImage) else painterResource(id = unselectedImage),
+ contentDescription = contentDescription,
+ )
+ }
+}
+// [END android_compose_components_iconbutton]
+
+// [START android_compose_components_momentaryiconbuttons]
+@Preview()
+@Composable
+fun MomentaryIconButtonExample() {
+ var pressedCount by remember { mutableIntStateOf(0) }
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ MomentaryIconButton(
+ unselectedImage = R.drawable.fast_rewind,
+ selectedImage = R.drawable.fast_rewind_filled,
+ stepDelay = 100L,
+ onClick = { pressedCount -= 1 },
+ contentDescription = "Decrease count button"
+ )
+ Spacer(modifier = Modifier)
+ Text("advanced by $pressedCount frames")
+ Spacer(modifier = Modifier)
+ MomentaryIconButton(
+ unselectedImage = R.drawable.fast_forward,
+ selectedImage = R.drawable.fast_forward_filled,
+ contentDescription = "Increase count button",
+ stepDelay = 100L,
+ onClick = { pressedCount += 1 }
+ )
+ }
+}
+// [END android_compose_components_momentaryiconbuttons]
diff --git a/compose/snippets/src/main/res/drawable/fast_forward.xml b/compose/snippets/src/main/res/drawable/fast_forward.xml
new file mode 100644
index 000000000..d49dffbf3
--- /dev/null
+++ b/compose/snippets/src/main/res/drawable/fast_forward.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/compose/snippets/src/main/res/drawable/fast_forward_filled.xml b/compose/snippets/src/main/res/drawable/fast_forward_filled.xml
new file mode 100644
index 000000000..2986028f5
--- /dev/null
+++ b/compose/snippets/src/main/res/drawable/fast_forward_filled.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/compose/snippets/src/main/res/drawable/fast_rewind.xml b/compose/snippets/src/main/res/drawable/fast_rewind.xml
new file mode 100644
index 000000000..aec6e80d9
--- /dev/null
+++ b/compose/snippets/src/main/res/drawable/fast_rewind.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/compose/snippets/src/main/res/drawable/fast_rewind_filled.xml b/compose/snippets/src/main/res/drawable/fast_rewind_filled.xml
new file mode 100644
index 000000000..e9426630e
--- /dev/null
+++ b/compose/snippets/src/main/res/drawable/fast_rewind_filled.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/compose/snippets/src/main/res/drawable/favorite.xml b/compose/snippets/src/main/res/drawable/favorite.xml
new file mode 100644
index 000000000..f9256d68d
--- /dev/null
+++ b/compose/snippets/src/main/res/drawable/favorite.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/compose/snippets/src/main/res/drawable/favorite_filled.xml b/compose/snippets/src/main/res/drawable/favorite_filled.xml
new file mode 100644
index 000000000..1e1136d7b
--- /dev/null
+++ b/compose/snippets/src/main/res/drawable/favorite_filled.xml
@@ -0,0 +1,9 @@
+
+
+