From dc088ae14a8f714e4618765ea57acf48e38da8b1 Mon Sep 17 00:00:00 2001 From: Rebecca Franks Date: Fri, 29 May 2026 13:40:48 +0100 Subject: [PATCH 1/2] Fix deprecations and upgrade OSS, Retrofit --- app/src/main/AndroidManifest.xml | 8 +-- .../androidify/navigation/MainNavigation.kt | 2 +- .../androidify/xr/SpatialComponents.kt | 17 ++++-- .../androidify/camera/CameraScreen.kt | 2 +- .../androidify/camera/CameraViewfinder.kt | 2 +- .../androidify/camera/CameraZoomToolbar.kt | 55 +++++++++++-------- .../camera/xr/CameraLayoutSpatial.kt | 20 ++++--- .../androidify/creation/EditScreenCompact.kt | 8 ++- .../creation/xr/EditScreenSpatial.kt | 9 ++- .../creation/xr/LoadingScreenSpatial.kt | 10 ++-- .../developers/androidify/home/AboutScreen.kt | 2 +- .../developers/androidify/home/HomeScreen.kt | 2 +- .../androidify/home/xr/AboutScreenSpatial.kt | 17 ++---- .../androidify/home/xr/HomeScreenSpatial.kt | 16 +++--- .../customize/CustomizeExportScreen.kt | 8 ++- .../watchface/WatchFaceModalSheet.kt | 3 +- .../xr/CustomizeExportScreenSpatial.kt | 10 ++-- .../results/xr/ResultsScreenSpatial.kt | 16 +++--- gradle/libs.versions.toml | 10 ++-- .../androidify/ui/CallToActionScreen.kt | 1 - 20 files changed, 115 insertions(+), 103 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c8f6e0fe..b5a5dded 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -99,12 +99,8 @@ - - - Boolean)? = null, + onMove: ((SpatialMoveEvent) -> Unit)? = null, content: @SubspaceComposable @Composable SpatialBoxScope.() -> Unit, @@ -72,7 +73,7 @@ fun BackgroundSubspace( aspectRatio: Float, @DrawableRes drawable: Int, minimumHeight: Dp, - onMove: ((SpatialMoveEvent) -> Boolean)? = null, + onMove: ((SpatialMoveEvent) -> Unit)? = null, content: @SubspaceComposable @Composable SpatialBoxScope.() -> Unit, @@ -81,8 +82,14 @@ fun BackgroundSubspace( SpatialPanel( SubspaceModifier .fillMaxWidth() - .aspectRatio(aspectRatio), - dragPolicy = MovePolicy(onMove = onMove), + .aspectRatio(aspectRatio) + .let { modifier -> + if (onMove != null) { + modifier.movable(onMove = onMove) + } else { + modifier.transformingMovable() + } + }, resizePolicy = ResizePolicy( minimumSize = DpVolumeSize(0.dp, minimumHeight, 0.dp), shouldMaintainAspectRatio = true, diff --git a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraScreen.kt b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraScreen.kt index 2c78626b..838ac5d4 100644 --- a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraScreen.kt +++ b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraScreen.kt @@ -56,7 +56,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.graphics.shapes.RoundedPolygon import androidx.graphics.shapes.rectangle -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.LifecycleStartEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.window.layout.FoldingFeature diff --git a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraViewfinder.kt b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraViewfinder.kt index 475a7f45..49070e72 100644 --- a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraViewfinder.kt +++ b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraViewfinder.kt @@ -69,7 +69,7 @@ internal fun CameraViewfinder( } .transformable( rememberTransformableState( - onTransformation = { zoomChange, _, _ -> + onTransformation = { _, zoomChange, _, _ -> onScaleCurrentZoom(zoomChange) }, ), diff --git a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt index 3fa0b84d..afae98bd 100644 --- a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt +++ b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt @@ -81,32 +81,43 @@ internal fun ZoomToolbar( val textMeasurer = rememberTextMeasurer() ButtonGroup( + overflowIndicator = {}, modifier = modifier, horizontalArrangement = Arrangement.spacedBy(ButtonGroupDefaults.ConnectedSpaceBetween), expandedRatio = 0f, ) { - ToggleButton( - checked = selectedOptionIndex == 0, - onCheckedChange = { onZoomLevelSelected(defaultZoomOptions[0]) }, - shapes = ButtonGroupDefaults.connectedLeadingButtonShapes(), - colors = ToggleButtonDefaults.toggleButtonColors(), - modifier = Modifier, - ) { - val textLayoutResult = textMeasurer.measure("M.MX", LocalTextStyle.current) - val width = with(LocalDensity.current) { textLayoutResult.size.width.toDp() } - Text(options[0], Modifier.widthIn(min = width), textAlign = TextAlign.Center) - } - ToggleButton( - checked = selectedOptionIndex == 1, - onCheckedChange = { onZoomLevelSelected(defaultZoomOptions[1]) }, - shapes = ButtonGroupDefaults.connectedTrailingButtonShapes(), - colors = ToggleButtonDefaults.toggleButtonColors(), - modifier = Modifier, - ) { - val textLayoutResult = textMeasurer.measure("M.MX", LocalTextStyle.current) - val width = with(LocalDensity.current) { textLayoutResult.size.width.toDp() } - Text(options[1], Modifier.widthIn(min = width), textAlign = TextAlign.Center) - } + customItem( + buttonGroupContent = { + ToggleButton( + checked = selectedOptionIndex == 0, + onCheckedChange = { onZoomLevelSelected(defaultZoomOptions[0]) }, + shapes = ButtonGroupDefaults.connectedLeadingButtonShapes(), + colors = ToggleButtonDefaults.toggleButtonColors(), + modifier = Modifier, + ) { + val textLayoutResult = textMeasurer.measure("M.MX", LocalTextStyle.current) + val width = with(LocalDensity.current) { textLayoutResult.size.width.toDp() } + Text(options[0], Modifier.widthIn(min = width), textAlign = TextAlign.Center) + } + }, + menuContent = {}, + ) + customItem( + buttonGroupContent = { + ToggleButton( + checked = selectedOptionIndex == 1, + onCheckedChange = { onZoomLevelSelected(defaultZoomOptions[1]) }, + shapes = ButtonGroupDefaults.connectedTrailingButtonShapes(), + colors = ToggleButtonDefaults.toggleButtonColors(), + modifier = Modifier, + ) { + val textLayoutResult = textMeasurer.measure("M.MX", LocalTextStyle.current) + val width = with(LocalDensity.current) { textLayoutResult.size.width.toDp() } + Text(options[1], Modifier.widthIn(min = width), textAlign = TextAlign.Center) + } + }, + menuContent = {}, + ) } } diff --git a/feature/camera/src/main/java/com/android/developers/androidify/camera/xr/CameraLayoutSpatial.kt b/feature/camera/src/main/java/com/android/developers/androidify/camera/xr/CameraLayoutSpatial.kt index 81bb8bea..8099e4bc 100644 --- a/feature/camera/src/main/java/com/android/developers/androidify/camera/xr/CameraLayoutSpatial.kt +++ b/feature/camera/src/main/java/com/android/developers/androidify/camera/xr/CameraLayoutSpatial.kt @@ -26,14 +26,14 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter -import androidx.xr.compose.spatial.OrbiterOffsetType +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.spatial.Subspace import androidx.xr.compose.subspace.SpatialPanel import androidx.xr.compose.subspace.layout.SubspaceModifier import androidx.xr.compose.subspace.layout.aspectRatio import androidx.xr.compose.subspace.layout.fillMaxSize +import androidx.xr.compose.unit.DpVolumeOffset import com.android.developers.androidify.xr.MainPanelWorkaround import com.android.developers.androidify.xr.RequestHomeSpaceIconButton @@ -55,10 +55,8 @@ fun CameraLayoutSpatial( .aspectRatio(surfaceAspectRatio), ) { Orbiter( - position = ContentEdge.Top, - offsetType = OrbiterOffsetType.InnerEdge, - offset = 32.dp, - alignment = Alignment.End, + anchorPoint = OrbiterAnchorPoint.TopEnd, + offset = DpVolumeOffset(x = (-32).dp, y = (-32).dp), ) { RequestHomeSpaceIconButton( modifier = Modifier @@ -69,13 +67,19 @@ fun CameraLayoutSpatial( ), ) } - Orbiter(ContentEdge.Start, offsetType = OrbiterOffsetType.InnerEdge, offset = 16.dp) { + Orbiter( + anchorPoint = OrbiterAnchorPoint.Start, + offset = DpVolumeOffset(x = 16.dp), + ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { captureButton(Modifier) flipCameraButton(Modifier) } } - Orbiter(ContentEdge.Bottom, offsetType = OrbiterOffsetType.InnerEdge) { + Orbiter( + anchorPoint = OrbiterAnchorPoint.Bottom, + offset = DpVolumeOffset(y = 16.dp), + ) { zoomButton(Modifier) } Box(Modifier.fillMaxSize()) { diff --git a/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenCompact.kt b/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenCompact.kt index dd11a2d8..17db1fea 100644 --- a/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenCompact.kt +++ b/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenCompact.kt @@ -44,8 +44,9 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.SheetValue import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.material3.rememberBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -134,7 +135,10 @@ private fun BotColorPickerBottomSheet( listBotColors: List, selectedBotColor: BotColor, ) { - val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + val sheetState = rememberBottomSheetState( + initialValue = SheetValue.Hidden, + enabledValues = setOf(SheetValue.Hidden, SheetValue.Expanded), + ) if (showColorPickerBottomSheet) { ModalBottomSheet( modifier = Modifier, diff --git a/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenSpatial.kt b/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenSpatial.kt index b3628c3f..09bfee5f 100644 --- a/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenSpatial.kt +++ b/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenSpatial.kt @@ -26,12 +26,11 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.subspace.SpatialColumn import androidx.xr.compose.subspace.SpatialPanel import androidx.xr.compose.subspace.SpatialRow @@ -41,6 +40,7 @@ import androidx.xr.compose.subspace.layout.fillMaxHeight import androidx.xr.compose.subspace.layout.fillMaxWidth import androidx.xr.compose.subspace.layout.offset import androidx.xr.compose.subspace.layout.width +import androidx.xr.compose.unit.DpVolumeOffset import com.android.developers.androidify.creation.AndroidBotColorPicker import com.android.developers.androidify.creation.BotColor import com.android.developers.androidify.creation.CreationState @@ -165,9 +165,8 @@ fun EditScreenSpatial( } Orbiter( - position = ContentEdge.Bottom, - alignment = Alignment.End, - offset = 16.dp, + anchorPoint = OrbiterAnchorPoint.BottomEnd, + offset = DpVolumeOffset(x = (-16).dp, y = (-16).dp), ) { TransformButton( buttonText = stringResource(CreationR.string.start_transformation_button), diff --git a/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/LoadingScreenSpatial.kt b/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/LoadingScreenSpatial.kt index 9b315282..baacf8b4 100644 --- a/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/LoadingScreenSpatial.kt +++ b/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/LoadingScreenSpatial.kt @@ -27,14 +27,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter -import androidx.xr.compose.spatial.OrbiterOffsetType +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.subspace.SpatialPanel import androidx.xr.compose.subspace.layout.SubspaceModifier import androidx.xr.compose.subspace.layout.fillMaxHeight import androidx.xr.compose.subspace.layout.fillMaxWidth import androidx.xr.compose.subspace.layout.offset +import androidx.xr.compose.unit.DpVolumeOffset import com.android.developers.androidify.creation.LoadingScreenContents import com.android.developers.androidify.creation.LoadingScreenScaffold import com.android.developers.androidify.theme.AndroidifyTheme @@ -59,10 +59,8 @@ fun LoadingScreenSpatial( drawable = CreationR.drawable.squiggle_light, ) { Orbiter( - position = ContentEdge.Top, - offsetType = OrbiterOffsetType.OuterEdge, - offset = 32.dp, - alignment = Alignment.End, + anchorPoint = OrbiterAnchorPoint.TopEnd, + offset = DpVolumeOffset(x = (-32).dp, y = 32.dp), ) { RequestHomeSpaceIconButton( modifier = Modifier diff --git a/feature/home/src/main/java/com/android/developers/androidify/home/AboutScreen.kt b/feature/home/src/main/java/com/android/developers/androidify/home/AboutScreen.kt index dda11140..1ec7ac63 100644 --- a/feature/home/src/main/java/com/android/developers/androidify/home/AboutScreen.kt +++ b/feature/home/src/main/java/com/android/developers/androidify/home/AboutScreen.kt @@ -55,7 +55,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation3.ui.LocalNavAnimatedContentScope import androidx.xr.compose.platform.LocalSpatialCapabilities diff --git a/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreen.kt b/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreen.kt index 370a849f..3343a4bf 100644 --- a/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreen.kt +++ b/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreen.kt @@ -24,7 +24,7 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.IntOffset -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.developers.androidify.home.xr.HomeScreenContentsSpatial import com.android.developers.androidify.theme.SharedElementContextPreview diff --git a/feature/home/src/main/java/com/android/developers/androidify/home/xr/AboutScreenSpatial.kt b/feature/home/src/main/java/com/android/developers/androidify/home/xr/AboutScreenSpatial.kt index 759bb33d..83d3092a 100644 --- a/feature/home/src/main/java/com/android/developers/androidify/home/xr/AboutScreenSpatial.kt +++ b/feature/home/src/main/java/com/android/developers/androidify/home/xr/AboutScreenSpatial.kt @@ -19,13 +19,12 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.PaddingValues import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter -import androidx.xr.compose.spatial.OrbiterOffsetType +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.subspace.SpatialPanel +import androidx.xr.compose.unit.DpVolumeOffset import com.android.developers.androidify.home.AboutScreenMedium import com.android.developers.androidify.home.BackButton import com.android.developers.androidify.xr.MainPanelWorkaround @@ -37,10 +36,8 @@ fun AboutScreenSpatial(onBackPressed: () -> Unit, bottomButtons: @Composable () SquiggleBackgroundSubspace(500.dp) { SpatialPanel { Orbiter( - ContentEdge.Top, - offset = 16.dp, - offsetType = OrbiterOffsetType.InnerEdge, - alignment = Alignment.Start, + anchorPoint = OrbiterAnchorPoint.TopStart, + offset = DpVolumeOffset(x = 16.dp, y = (-16).dp), ) { BackButton(onBackPressed) } @@ -50,10 +47,8 @@ fun AboutScreenSpatial(onBackPressed: () -> Unit, bottomButtons: @Composable () bottomButtons = null, ) Orbiter( - position = ContentEdge.Bottom, - offset = 48.dp, - offsetType = OrbiterOffsetType.InnerEdge, - elevation = 0.dp, + anchorPoint = OrbiterAnchorPoint.Bottom, + offset = DpVolumeOffset(y = 48.dp, z = 0.dp), ) { bottomButtons() } diff --git a/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenSpatial.kt b/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenSpatial.kt index 7f54dd1a..b58a2e0d 100644 --- a/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenSpatial.kt +++ b/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenSpatial.kt @@ -36,10 +36,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.layout.onLayoutRectChanged import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter -import androidx.xr.compose.spatial.OrbiterOffsetType -import androidx.xr.compose.subspace.MovePolicy +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.subspace.ResizePolicy import androidx.xr.compose.subspace.SpatialPanel import androidx.xr.compose.subspace.layout.SpatialAlignment @@ -50,6 +48,8 @@ import androidx.xr.compose.subspace.layout.fillMaxSize import androidx.xr.compose.subspace.layout.fillMaxWidth import androidx.xr.compose.subspace.layout.offset import androidx.xr.compose.subspace.layout.rotate +import androidx.xr.compose.subspace.layout.transformingMovable +import androidx.xr.compose.unit.DpVolumeOffset import com.android.developers.androidify.home.HomePageButton import com.android.developers.androidify.home.MainHomeContent import com.android.developers.androidify.home.VideoPlayer @@ -73,10 +73,8 @@ fun HomeScreenContentsSpatial( MainPanelWorkaround() SquiggleBackgroundSubspace(minimumHeight = 600.dp) { Orbiter( - position = ContentEdge.Top, - offsetType = OrbiterOffsetType.OuterEdge, - offset = 32.dp, - alignment = Alignment.End, + anchorPoint = OrbiterAnchorPoint.TopEnd, + offset = DpVolumeOffset(x = (-32).dp, y = 32.dp), ) { RequestHomeSpaceIconButton( modifier = Modifier @@ -97,9 +95,9 @@ fun HomeScreenContentsSpatial( .aspectRatio(0.77f) .align(SpatialAlignment.CenterEnd) .offset(z = 10.dp) - .rotate(0f, 0f, 5f), + .rotate(0f, 0f, 5f) + .transformingMovable(), resizePolicy = ResizePolicy(shouldMaintainAspectRatio = true), - dragPolicy = MovePolicy(), ) { VideoPlayer(videoLink) } diff --git a/feature/results/src/main/java/com/android/developers/androidify/customize/CustomizeExportScreen.kt b/feature/results/src/main/java/com/android/developers/androidify/customize/CustomizeExportScreen.kt index 46213581..99518485 100644 --- a/feature/results/src/main/java/com/android/developers/androidify/customize/CustomizeExportScreen.kt +++ b/feature/results/src/main/java/com/android/developers/androidify/customize/CustomizeExportScreen.kt @@ -43,11 +43,12 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold +import androidx.compose.material3.SheetValue import androidx.compose.material3.Snackbar import androidx.compose.material3.SnackbarDefaults import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.material3.rememberBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect @@ -162,8 +163,9 @@ private fun CustomizeExportContents( onWatchFaceSelect: (WatchFaceAsset) -> Unit, ) { var showWatchFaceBottomSheet by remember { mutableStateOf(false) } - val watchFaceSheetState = rememberModalBottomSheetState( - skipPartiallyExpanded = true, + val watchFaceSheetState = rememberBottomSheetState( + initialValue = SheetValue.Hidden, + enabledValues = setOf(SheetValue.Hidden, SheetValue.Expanded), ) val imageResult = remember(state.showImageEditProgress) { movableContentWithReceiverOf { diff --git a/feature/results/src/main/java/com/android/developers/androidify/customize/watchface/WatchFaceModalSheet.kt b/feature/results/src/main/java/com/android/developers/androidify/customize/watchface/WatchFaceModalSheet.kt index 027907d1..d6011ac6 100644 --- a/feature/results/src/main/java/com/android/developers/androidify/customize/watchface/WatchFaceModalSheet.kt +++ b/feature/results/src/main/java/com/android/developers/androidify/customize/watchface/WatchFaceModalSheet.kt @@ -226,9 +226,8 @@ private fun WatchFaceModalSheetPreview() { previewPath = R.drawable.watch_face_preview, ) val sheetState = SheetState( + enabledValues = setOf(SheetValue.Expanded), initialValue = SheetValue.Expanded, - skipHiddenState = true, - skipPartiallyExpanded = true, positionalThreshold = { 0f }, velocityThreshold = { 0f }, ) diff --git a/feature/results/src/main/java/com/android/developers/androidify/customize/xr/CustomizeExportScreenSpatial.kt b/feature/results/src/main/java/com/android/developers/androidify/customize/xr/CustomizeExportScreenSpatial.kt index 338a2cf7..5dee31d7 100644 --- a/feature/results/src/main/java/com/android/developers/androidify/customize/xr/CustomizeExportScreenSpatial.kt +++ b/feature/results/src/main/java/com/android/developers/androidify/customize/xr/CustomizeExportScreenSpatial.kt @@ -30,9 +30,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.LookaheadScope import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter -import androidx.xr.compose.spatial.OrbiterOffsetType +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.subspace.SpatialBox import androidx.xr.compose.subspace.SpatialColumn import androidx.xr.compose.subspace.SpatialPanel @@ -43,6 +42,7 @@ import androidx.xr.compose.subspace.layout.fillMaxHeight import androidx.xr.compose.subspace.layout.fillMaxWidth import androidx.xr.compose.subspace.layout.offset import androidx.xr.compose.subspace.layout.width +import androidx.xr.compose.unit.DpVolumeOffset import com.android.developers.androidify.customize.CustomizeExportScreenScaffold import com.android.developers.androidify.customize.CustomizeExportState import com.android.developers.androidify.customize.ExportImageCanvas @@ -67,7 +67,7 @@ fun CustomizeExportLayoutSpatial( SquiggleBackgroundSubspace(minimumHeight = 600.dp) { MainPanelWorkaround() SpatialColumn(SubspaceModifier.fillMaxWidth()) { - Orbiter(position = ContentEdge.Bottom, alignment = Alignment.End) { + Orbiter(anchorPoint = OrbiterAnchorPoint.BottomEnd) { actionButtons(Modifier) } SpatialPanel( @@ -116,8 +116,8 @@ fun CustomizeExportLayoutSpatial( ) { toolDetail(Modifier, false) Orbiter( - position = ContentEdge.End, - offsetType = OrbiterOffsetType.InnerEdge, + anchorPoint = OrbiterAnchorPoint.End, + offset = DpVolumeOffset(x = (-16).dp), ) { toolSelector(Modifier, false) } diff --git a/feature/results/src/main/java/com/android/developers/androidify/results/xr/ResultsScreenSpatial.kt b/feature/results/src/main/java/com/android/developers/androidify/results/xr/ResultsScreenSpatial.kt index d5ffccd5..e278f3b7 100644 --- a/feature/results/src/main/java/com/android/developers/androidify/results/xr/ResultsScreenSpatial.kt +++ b/feature/results/src/main/java/com/android/developers/androidify/results/xr/ResultsScreenSpatial.kt @@ -25,15 +25,13 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp -import androidx.xr.compose.spatial.ContentEdge import androidx.xr.compose.spatial.Orbiter -import androidx.xr.compose.spatial.OrbiterOffsetType +import androidx.xr.compose.spatial.OrbiterAnchorPoint import androidx.xr.compose.spatial.Subspace import androidx.xr.compose.subspace.SpatialBox import androidx.xr.compose.subspace.SpatialPanel @@ -42,6 +40,7 @@ import androidx.xr.compose.subspace.layout.fillMaxHeight import androidx.xr.compose.subspace.layout.fillMaxWidth import androidx.xr.compose.subspace.layout.offset import androidx.xr.compose.subspace.layout.rotate +import androidx.xr.compose.unit.DpVolumeOffset import androidx.xr.runtime.math.Pose import androidx.xr.runtime.math.Vector3 import com.android.developers.androidify.results.ResultsScreenScaffold @@ -77,10 +76,12 @@ fun ResultsScreenSpatial( minimumHeight = 500.dp, onMove = { moveEvent -> offsetPose = moveEvent.pose - false }, ) { - Orbiter(ContentEdge.Top, offsetType = OrbiterOffsetType.InnerEdge) { + Orbiter( + anchorPoint = OrbiterAnchorPoint.Top, + offset = DpVolumeOffset(y = (-16).dp), + ) { Box( Modifier .background( @@ -106,9 +107,8 @@ fun ResultsScreenSpatial( } Orbiter( - position = ContentEdge.Bottom, - offsetType = OrbiterOffsetType.InnerEdge, - alignment = Alignment.End, + anchorPoint = OrbiterAnchorPoint.BottomEnd, + offset = DpVolumeOffset(y = 16.dp), ) { buttonRow(Modifier) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c8d81e48..1d7da77e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] # build -appVersionCode = "10" -appVersionName = "1.3.0" +appVersionCode = "11" +appVersionName = "1.4.0" appVersionWearOffset = "60000000" agp = "9.2.1" bcpkixJdk18on = "1.84" @@ -23,13 +23,13 @@ coilCompose = "3.4.0" coilGif = "3.4.0" composeBom = "2026.05.01" concurrent = "1.3.0" -converterGson = "2.11.0" +converterGson = "3.0.0" coreKtx = "1.18.0" coreSplashscreen = "1.2.0" crashlytics = "3.0.7" datastore = "1.2.1" espressoCore = "3.7.0" -firebaseBom = "34.13.0" +firebaseBom = "34.14.0" genaiPrompt = "1.0.0-beta2" googleServices = "4.4.4" googleOss = "17.5.1" @@ -58,7 +58,7 @@ playServicesWearable = "20.0.1" playServicesBaseTesting = "16.2.0" poseDetection = "18.0.0-beta5" profileinstaller = "1.4.1" -retrofit = "2.11.0" +retrofit = "3.0.0" robolectric = "4.16.1" spotless = "8.6.0" startup = "1.2.0" diff --git a/wear/src/main/java/com/android/developers/androidify/ui/CallToActionScreen.kt b/wear/src/main/java/com/android/developers/androidify/ui/CallToActionScreen.kt index 5ecfc22b..a63c3c50 100644 --- a/wear/src/main/java/com/android/developers/androidify/ui/CallToActionScreen.kt +++ b/wear/src/main/java/com/android/developers/androidify/ui/CallToActionScreen.kt @@ -30,7 +30,6 @@ import androidx.wear.compose.material3.IconButtonDefaults import androidx.wear.compose.material3.MaterialTheme import androidx.wear.compose.material3.ScreenScaffold import androidx.wear.compose.material3.Text -import androidx.wear.compose.material3.lazy.rememberTransformationSpec import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices import com.android.developers.androidify.R import com.android.developers.androidify.ui.theme.AndroidifyWearTheme From 422191551be8abade566fa0422e22fd32e397507 Mon Sep 17 00:00:00 2001 From: Rebecca Franks Date: Fri, 29 May 2026 13:46:58 +0100 Subject: [PATCH 2/2] Remove text measure logic --- .../developers/androidify/camera/CameraZoomToolbar.kt | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt index afae98bd..de4837f2 100644 --- a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt +++ b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraZoomToolbar.kt @@ -78,7 +78,6 @@ internal fun ZoomToolbar( } } } - val textMeasurer = rememberTextMeasurer() ButtonGroup( overflowIndicator = {}, @@ -95,9 +94,7 @@ internal fun ZoomToolbar( colors = ToggleButtonDefaults.toggleButtonColors(), modifier = Modifier, ) { - val textLayoutResult = textMeasurer.measure("M.MX", LocalTextStyle.current) - val width = with(LocalDensity.current) { textLayoutResult.size.width.toDp() } - Text(options[0], Modifier.widthIn(min = width), textAlign = TextAlign.Center) + Text(options[0], Modifier, textAlign = TextAlign.Center) } }, menuContent = {}, @@ -111,9 +108,7 @@ internal fun ZoomToolbar( colors = ToggleButtonDefaults.toggleButtonColors(), modifier = Modifier, ) { - val textLayoutResult = textMeasurer.measure("M.MX", LocalTextStyle.current) - val width = with(LocalDensity.current) { textLayoutResult.size.width.toDp() } - Text(options[1], Modifier.widthIn(min = width), textAlign = TextAlign.Center) + Text(options[1], Modifier, textAlign = TextAlign.Center) } }, menuContent = {},