Deprecate SwipeToDismissBoxState, SwipeToDismissValue and edgeSwipeToDismiss

These can now be deprecated as all Swipe-to-Dismiss functionality is provided by wear.compose.foundation. In particular, the Wear.Compose.Material.SwipeToDismissBoxState had a foundationState property which was raised as a concern in the api-review - this only existed for backwards compatibility and deprecating these classes makes that clearer.

Bug: 292537483
Test: Updated tests to replace deprecations
Relnote: "We have deprecated the Material SwipeToDismissBoxState, SwipeToDismissValue and edgeSwipeToDismiss following the migration of Swipe-to-Dismiss functionality to wear.compose.foundation. Please replace with the wear.compose.foundation equivalents."
Change-Id: Iee8c97aeb50a9109d35fc70d41c57fb755dab699
diff --git a/wear/compose/compose-material/api/current.txt b/wear/compose/compose-material/api/current.txt
index 15646f2..66399d5 100644
--- a/wear/compose/compose-material/api/current.txt
+++ b/wear/compose/compose-material/api/current.txt
@@ -664,21 +664,23 @@
   }
 
   public final class SwipeToDismissBoxKt {
-    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
-    method public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
-    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.foundation.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
   }
 
-  @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
-    ctor public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
-    method public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
-    method public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
-    method public boolean isAnimationRunning();
-    method public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    property public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
-    property public final boolean isAnimationRunning;
-    property public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
+  @Deprecated @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
+    ctor @Deprecated public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method @Deprecated public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
+    method @Deprecated public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
+    method @Deprecated public boolean isAnimationRunning();
+    method @Deprecated public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property @Deprecated public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
+    property @Deprecated public final boolean isAnimationRunning;
+    property @Deprecated public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
   }
 
   public enum SwipeToDismissKeys {
@@ -688,11 +690,11 @@
     enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Content;
   }
 
-  public enum SwipeToDismissValue {
-    method public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
-    method public static androidx.wear.compose.material.SwipeToDismissValue[] values();
-    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Default;
-    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
+  @Deprecated public enum SwipeToDismissValue {
+    method @Deprecated public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method @Deprecated public static androidx.wear.compose.material.SwipeToDismissValue[] values();
+    enum_constant @Deprecated public static final androidx.wear.compose.material.SwipeToDismissValue Default;
+    enum_constant @Deprecated public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
   }
 
   @SuppressCompatibility @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class SwipeToRevealAction {
diff --git a/wear/compose/compose-material/api/restricted_current.txt b/wear/compose/compose-material/api/restricted_current.txt
index 15646f2..66399d5 100644
--- a/wear/compose/compose-material/api/restricted_current.txt
+++ b/wear/compose/compose-material/api/restricted_current.txt
@@ -664,21 +664,23 @@
   }
 
   public final class SwipeToDismissBoxKt {
-    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
-    method public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
-    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.foundation.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
   }
 
-  @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
-    ctor public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
-    method public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
-    method public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
-    method public boolean isAnimationRunning();
-    method public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    property public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
-    property public final boolean isAnimationRunning;
-    property public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
+  @Deprecated @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
+    ctor @Deprecated public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method @Deprecated public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
+    method @Deprecated public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
+    method @Deprecated public boolean isAnimationRunning();
+    method @Deprecated public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property @Deprecated public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
+    property @Deprecated public final boolean isAnimationRunning;
+    property @Deprecated public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
   }
 
   public enum SwipeToDismissKeys {
@@ -688,11 +690,11 @@
     enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Content;
   }
 
-  public enum SwipeToDismissValue {
-    method public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
-    method public static androidx.wear.compose.material.SwipeToDismissValue[] values();
-    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Default;
-    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
+  @Deprecated public enum SwipeToDismissValue {
+    method @Deprecated public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method @Deprecated public static androidx.wear.compose.material.SwipeToDismissValue[] values();
+    enum_constant @Deprecated public static final androidx.wear.compose.material.SwipeToDismissValue Default;
+    enum_constant @Deprecated public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
   }
 
   @SuppressCompatibility @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class SwipeToRevealAction {
diff --git a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToDismissBoxSample.kt b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToDismissBoxSample.kt
index 95c8021..d48b72e 100644
--- a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToDismissBoxSample.kt
+++ b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToDismissBoxSample.kt
@@ -37,15 +37,15 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.unit.dp
+import androidx.wear.compose.foundation.SwipeToDismissValue
+import androidx.wear.compose.foundation.edgeSwipeToDismiss
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
 import androidx.wear.compose.material.Icon
 import androidx.wear.compose.material.MaterialTheme
 import androidx.wear.compose.material.SplitToggleChip
 import androidx.wear.compose.material.SwipeToDismissBox
-import androidx.wear.compose.material.SwipeToDismissValue
 import androidx.wear.compose.material.Text
 import androidx.wear.compose.material.ToggleChipDefaults
-import androidx.wear.compose.material.edgeSwipeToDismiss
-import androidx.wear.compose.material.rememberSwipeToDismissBoxState
 
 @Sampled
 @Composable
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
index ef0184e..673dc72 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
@@ -43,6 +43,7 @@
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.AndroidXScreenshotTestRule
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
 import org.junit.Rule
 import org.junit.Test
 import org.junit.rules.TestName
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
index 7e6bfe2..42f7b95 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
@@ -48,6 +48,10 @@
 import androidx.compose.ui.test.swipeLeft
 import androidx.compose.ui.test.swipeRight
 import androidx.compose.ui.test.swipeWithVelocity
+import androidx.wear.compose.foundation.SwipeToDismissBoxState
+import androidx.wear.compose.foundation.SwipeToDismissValue
+import androidx.wear.compose.foundation.edgeSwipeToDismiss
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
 import com.google.common.truth.Truth.assertThat
 import java.lang.Math.sin
 import org.junit.Assert.assertEquals
@@ -579,7 +583,6 @@
 
 private const val BACKGROUND_MESSAGE = "The Background"
 private const val CONTENT_MESSAGE = "The Content"
-private const val LONG_SWIPE = 1000L
 private const val TOGGLE_SCREEN = "Toggle"
 private const val COUNTER_SCREEN = "Counter"
 private const val TOGGLE_ON = "On"
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
index ddbc6dc..7e37cdb 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
@@ -69,6 +69,75 @@
  */
 @Composable
 public fun SwipeToDismissBox(
+    state: androidx.wear.compose.foundation.SwipeToDismissBoxState,
+    modifier: Modifier = Modifier,
+    backgroundScrimColor: Color = MaterialTheme.colors.background,
+    contentScrimColor: Color = MaterialTheme.colors.background,
+    backgroundKey: Any = SwipeToDismissKeys.Background,
+    contentKey: Any = SwipeToDismissKeys.Content,
+    hasBackground: Boolean = true,
+    content: @Composable BoxScope.(isBackground: Boolean) -> Unit
+) {
+    CompositionLocalProvider(
+        LocalSwipeToDismissBackgroundScrimColor provides backgroundScrimColor,
+        LocalSwipeToDismissContentScrimColor provides contentScrimColor
+    ) {
+        androidx.wear.compose.foundation.SwipeToDismissBox(
+            state = state,
+            modifier = modifier,
+            backgroundKey = backgroundKey,
+            contentKey = contentKey,
+            userSwipeEnabled = hasBackground,
+            content = content
+        )
+    }
+}
+
+/**
+ * Wear Material [SwipeToDismissBox] that handles the swipe-to-dismiss gesture. Takes a single
+ * slot for the background (only displayed during the swipe gesture) and the foreground content.
+ *
+ * Example of a [SwipeToDismissBox] with stateful composables:
+ * @sample androidx.wear.compose.material.samples.StatefulSwipeToDismissBox
+ *
+ * Example of using [Modifier.edgeSwipeToDismiss] with [SwipeToDismissBox]
+ * @sample androidx.wear.compose.material.samples.EdgeSwipeForSwipeToDismiss
+ *
+ * For more information, see the
+ * [Swipe to dismiss](https://developer.android.com/training/wearables/components/swipe-to-dismiss)
+ * guide.
+ *
+ * @param state State containing information about ongoing swipe or animation.
+ * @param modifier Optional [Modifier] for this component.
+ * @param backgroundScrimColor Color for background scrim
+ * @param contentScrimColor Optional [Color] used for the scrim over the
+ * content composable during the swipe gesture.
+ * @param backgroundKey Optional [key] which identifies the content currently composed in
+ * the [content] block when isBackground == true. Provide the backgroundKey if your background
+ * content will be displayed as a foreground after the swipe animation ends
+ * (as is common when [SwipeToDismissBox] is used for the navigation). This allows
+ * remembered state to be correctly moved between background and foreground.
+ * @Param contentKey Optional [key] which identifies the content currently composed in the
+ * [content] block when isBackground == false. See [backgroundKey].
+ * @Param hasBackground Optional [Boolean] used to indicate if the content has no background,
+ * in which case the swipe gesture is disabled (since there is no parent destination).
+ * @param content Slot for content, with the isBackground parameter enabling content to be
+ * displayed behind the foreground content - the background is normally hidden,
+ * is shown behind a scrim during the swipe gesture,
+ * and is shown without scrim once the finger passes the swipe-to-dismiss threshold.
+ */
+@Suppress("DEPRECATION")
+@Deprecated(
+    "This overload is provided for backwards compatibility. " +
+        "A newer overload is available that uses " +
+        "androidx.wear.compose.foundation.SwipeToDismissBoxState.",
+    replaceWith = ReplaceWith("SwipeToDismissBox(" +
+        "state, modifier, backgroundScrimColor, contentScrimColor, backgroundKey, contentKey," +
+        "hasBackground, content)"
+    )
+)
+@Composable
+public fun SwipeToDismissBox(
     state: SwipeToDismissBoxState,
     modifier: Modifier = Modifier,
     backgroundScrimColor: Color = MaterialTheme.colors.background,
@@ -132,6 +201,81 @@
 public fun SwipeToDismissBox(
     onDismissed: () -> Unit,
     modifier: Modifier = Modifier,
+    state: androidx.wear.compose.foundation.SwipeToDismissBoxState =
+        androidx.wear.compose.foundation.rememberSwipeToDismissBoxState(),
+    backgroundScrimColor: Color = MaterialTheme.colors.background,
+    contentScrimColor: Color = MaterialTheme.colors.background,
+    backgroundKey: Any = SwipeToDismissKeys.Background,
+    contentKey: Any = SwipeToDismissKeys.Content,
+    hasBackground: Boolean = true,
+    content: @Composable BoxScope.(isBackground: Boolean) -> Unit
+) {
+    CompositionLocalProvider(
+        LocalSwipeToDismissBackgroundScrimColor provides backgroundScrimColor,
+        LocalSwipeToDismissContentScrimColor provides contentScrimColor
+    ) {
+        androidx.wear.compose.foundation.SwipeToDismissBox(
+            state = state,
+            modifier = modifier,
+            onDismissed = onDismissed,
+            backgroundKey = backgroundKey,
+            contentKey = contentKey,
+            userSwipeEnabled = hasBackground,
+            content = content
+        )
+    }
+}
+
+/**
+ * Wear Material [SwipeToDismissBox] that handles the swipe-to-dismiss gesture.
+ * This overload takes an [onDismissed] parameter which is used to execute a command when the
+ * swipe to dismiss has completed, such as navigating to another screen.
+ *
+ * Example of a simple SwipeToDismissBox:
+ * @sample androidx.wear.compose.material.samples.SimpleSwipeToDismissBox
+ *
+ * Example of using [Modifier.edgeSwipeToDismiss] with [SwipeToDismissBox]
+ * @sample androidx.wear.compose.material.samples.EdgeSwipeForSwipeToDismiss
+ *
+ * For more information, see the
+ * [Swipe to dismiss](https://developer.android.com/training/wearables/components/swipe-to-dismiss)
+ * guide.
+ *
+ * @param onDismissed Executes when the swipe to dismiss has completed.
+ * @param modifier Optional [Modifier] for this component.
+ * @param state State containing information about ongoing swipe or animation.
+ * @param backgroundScrimColor Color for background scrim
+ * @param contentScrimColor Optional [Color] used for the scrim over the
+ * content composable during the swipe gesture.
+ * @param backgroundKey Optional [key] which identifies the content currently composed in
+ * the [content] block when isBackground == true. Provide the backgroundKey if your background
+ * content will be displayed as a foreground after the swipe animation ends
+ * (as is common when [SwipeToDismissBox] is used for the navigation). This allows
+ * remembered state to be correctly moved between background and foreground.
+ * @Param contentKey Optional [key] which identifies the content currently composed in the
+ * [content] block when isBackground == false. See [backgroundKey].
+ * @Param hasBackground Optional [Boolean] used to indicate if the content has no background,
+ * in which case the swipe gesture is disabled (since there is no parent destination).
+ * @param content Slot for content, with the isBackground parameter enabling content to be
+ * displayed behind the foreground content - the background is normally hidden,
+ * is shown behind a scrim during the swipe gesture,
+ * and is shown without scrim once the finger passes the swipe-to-dismiss threshold.
+ */
+@Suppress("DEPRECATION")
+@Deprecated(
+    "This overload is provided for backwards compatibility. " +
+        "A newer overload is available that uses " +
+        "androidx.wear.compose.foundation.SwipeToDismissBoxState.",
+    replaceWith = ReplaceWith("SwipeToDismissBox(" +
+        "onDismiss, modifier, state, backgroundScrimColor, contentScrimColor, backgroundKey," +
+        "contentKey, hasBackground, content)"
+    ),
+    level = DeprecationLevel.HIDDEN
+)
+@Composable
+public fun SwipeToDismissBox(
+    onDismissed: () -> Unit,
+    modifier: Modifier = Modifier,
     state: SwipeToDismissBoxState = rememberSwipeToDismissBoxState(),
     backgroundScrimColor: Color = MaterialTheme.colors.background,
     contentScrimColor: Color = MaterialTheme.colors.background,
@@ -162,6 +306,11 @@
  * @param animationSpec The default animation that will be used to animate to a new state.
  * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
  */
+@Suppress("DEPRECATION")
+@Deprecated(
+    "SwipeToDismissBoxState has been migrated, please import it " +
+        "from androidx.wear.compose.foundation.",
+)
 @Stable
 public class SwipeToDismissBoxState(
     animationSpec: AnimationSpec<Float> = SwipeToDismissBoxDefaults.AnimationSpec,
@@ -220,6 +369,14 @@
  * @param animationSpec The default animation used to animate to a new state.
  * @param confirmStateChange Optional callback to confirm or veto a pending state change.
  */
+@Suppress("DEPRECATION")
+@Deprecated(
+    "Please import rememberSwipeToDismissBoxState from androidx.wear.compose.foundation.",
+    ReplaceWith(
+        "androidx.wear.compose.foundation.rememberSwipeToDismissBoxState(",
+        "animationSpec, confirmStateChange)"
+    )
+)
 @Composable
 public fun rememberSwipeToDismissBoxState(
     animationSpec: AnimationSpec<Float> = SWIPE_TO_DISMISS_BOX_ANIMATION_SPEC,
@@ -269,6 +426,10 @@
 /**
  * States used as targets for the anchor points for swipe-to-dismiss.
  */
+@Deprecated(
+    "SwipeToDismiss has been migrated to androidx.wear.compose.foundation. " +
+        "Please import SwipeToDismissValue from androidx.wear.compose.foundation instead.",
+)
 public enum class SwipeToDismissValue {
     /**
      * The state of the SwipeToDismissBox before the swipe started.
@@ -301,6 +462,15 @@
  * on SwipeToDismissBox
  * @param edgeWidth A width of edge, where swipe should be recognised
  */
+@Suppress("DEPRECATION")
+@Deprecated(
+    "SwipeToDismiss has been migrated to androidx.wear.compose.foundation. " +
+        "Please import Modifier.edgeSwipeToDismiss from androidx.wear.compose.foundation instead.",
+    replaceWith = ReplaceWith(
+        "androidx.wear.compose.foundation.edgeSwipeToDismiss(",
+        "swipeToDismissBoxState, edgeWidth)"
+    )
+)
 public fun Modifier.edgeSwipeToDismiss(
     swipeToDismissBoxState: SwipeToDismissBoxState,
     edgeWidth: Dp = SwipeToDismissBoxDefaults.EdgeWidth
@@ -310,6 +480,7 @@
         edgeWidth = edgeWidth
     )
 
+@Suppress("DEPRECATION")
 private fun convertToFoundationSwipeToDismissValue(
     value: SwipeToDismissValue
 ) = when (value) {
@@ -320,6 +491,7 @@
         androidx.wear.compose.foundation.SwipeToDismissValue.Dismissed
 }
 
+@Suppress("DEPRECATION")
 private fun convertFromFoundationSwipeToDismissValue(
     value: androidx.wear.compose.foundation.SwipeToDismissValue
 ) = when (value) {
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.android.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.android.kt
index 95487bd..966ee28 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.android.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.android.kt
@@ -40,6 +40,7 @@
 import androidx.compose.ui.window.DialogProperties
 import androidx.wear.compose.foundation.lazy.ScalingLazyListState
 import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
 import androidx.wear.compose.material.CASUAL
 import androidx.wear.compose.material.MaterialTheme
 import androidx.wear.compose.material.PositionIndicator
@@ -51,7 +52,6 @@
 import androidx.wear.compose.material.SwipeToDismissBox
 import androidx.wear.compose.material.Vignette
 import androidx.wear.compose.material.VignettePosition
-import androidx.wear.compose.material.rememberSwipeToDismissBoxState
 
 /**
  * [Dialog] displays a full-screen dialog, layered over any other content. It takes a single slot,
diff --git a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
index 138c202..dc62e9e 100644
--- a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
+++ b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
@@ -355,7 +355,7 @@
 public class SwipeDismissableNavHostState(
     internal val swipeToDismissBoxState: SwipeToDismissBoxState
 ) {
-
+    @Suppress("DEPRECATION")
     @Deprecated(
         "This overload is provided for backward compatibility. " +
             "A newer overload is available which uses SwipeToDismissBoxState " +