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 " +