From 513c8a8d76911190b46c85e0b6a548786b028ff5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 05:06:09 +0000 Subject: [PATCH] Fix XR build after androidx.xr.compose update to alpha11 - Remove custom implementations of sealed interfaces SpatialConfiguration and SpatialCapabilities - Delete workaround composition locals for Preview (fixed in library) --- .../androidify/xr/SpatialUiModes.kt | 3 + .../developers/androidify/xr/XrPreview.kt | 102 ------------------ .../androidify/camera/CameraLayout.kt | 2 +- .../creation/EditScreenLayoutType.kt | 2 +- .../xr/EditScreenHomeSpaceModePreviews.kt | 69 ++++++------ .../androidify/home/HomeScreenMedium.kt | 19 ++-- .../xr/HomeScreenHomeSpaceModePreviews.kt | 35 +++--- .../androidify/results/ResultsLayoutType.kt | 2 +- gradle/libs.versions.toml | 2 +- 9 files changed, 62 insertions(+), 174 deletions(-) diff --git a/core/xr/src/main/java/com/android/developers/androidify/xr/SpatialUiModes.kt b/core/xr/src/main/java/com/android/developers/androidify/xr/SpatialUiModes.kt index f9266bd4..2df52b7a 100644 --- a/core/xr/src/main/java/com/android/developers/androidify/xr/SpatialUiModes.kt +++ b/core/xr/src/main/java/com/android/developers/androidify/xr/SpatialUiModes.kt @@ -27,6 +27,9 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp +import androidx.xr.compose.platform.LocalSession +import androidx.xr.compose.platform.LocalSpatialCapabilities +import androidx.xr.compose.platform.LocalSpatialConfiguration import androidx.xr.scenecore.scene /** Check if the device is XR-enabled, but is not yet rendering spatial UI. */ diff --git a/core/xr/src/main/java/com/android/developers/androidify/xr/XrPreview.kt b/core/xr/src/main/java/com/android/developers/androidify/xr/XrPreview.kt index b06d5e65..12f3f84a 100644 --- a/core/xr/src/main/java/com/android/developers/androidify/xr/XrPreview.kt +++ b/core/xr/src/main/java/com/android/developers/androidify/xr/XrPreview.kt @@ -15,111 +15,9 @@ */ package com.android.developers.androidify.xr -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.ProvidableCompositionLocal -import androidx.compose.runtime.compositionLocalWithComputedDefaultOf import androidx.compose.ui.tooling.preview.Devices.PIXEL_7_PRO import androidx.compose.ui.tooling.preview.Devices.PIXEL_TABLET import androidx.compose.ui.tooling.preview.Preview -import androidx.xr.compose.platform.SpatialCapabilities -import androidx.xr.compose.platform.SpatialConfiguration -import androidx.xr.runtime.Session - -/** - * Preview for a layout that could go into Full Space Mode. - */ -@Composable -fun SupportsFullSpaceModeRequestProvider(contents: @Composable () -> Unit) { - CompositionLocalProvider(LocalSpatialConfiguration provides HasSpatialFeatureSpatialConfiguration) { - CompositionLocalProvider(LocalSpatialCapabilities provides SupportsFullSpaceModeRequestCapabilities) { - CompositionLocalProvider(LocalSession provides null) { - contents() - } - } - } -} - -private object HasSpatialFeatureSpatialConfiguration : SpatialConfiguration { - override val hasXrSpatialFeature: Boolean - get() = true -} - -private object SupportsFullSpaceModeRequestCapabilities : SpatialCapabilities { - override val isSpatialUiEnabled: Boolean - get() = false - override val isContent3dEnabled: Boolean - get() = true - override val isAppEnvironmentEnabled: Boolean - get() = true - override val isPassthroughControlEnabled: Boolean - get() = true - override val isSpatialAudioEnabled: Boolean - get() = true -} - -/** - * Workaround composition locals for b/441901724. - * Any composable referencing XR composition locals will fail to preview instead of gracefully - * degrading due to failing to resolve XR capabilities. - * - * This can be removed when the default for XR capabilities under the preview is no capabilities - * instead of throwing an exception. - * */ -val LocalSpatialCapabilities: ProvidableCompositionLocal = - compositionLocalWithComputedDefaultOf { - runCatching { - androidx.xr.compose.platform.LocalSpatialCapabilities.currentValue - }.getOrDefault(NoSpatialCapabilities) - } - -/** - * Workaround composition locals for b/441901724. - * Any composable referencing XR composition locals will fail to preview instead of gracefully - * degrading due to failing to resolve XR capabilities. - * - * This can be removed when the default for XR capabilities under the preview is no capabilities - * instead of throwing an exception. - * */ -val LocalSpatialConfiguration: ProvidableCompositionLocal = - compositionLocalWithComputedDefaultOf { - runCatching { - androidx.xr.compose.platform.LocalSpatialConfiguration.currentValue - }.getOrDefault(LacksSpatialFeatureSpatialConfiguration) - } - -/** - * Workaround composition locals for b/441901724. - * Any composable referencing XR composition locals will fail to preview instead of gracefully - * degrading due to failing to resolve XR capabilities. - * - * This can be removed when the default for XR capabilities under the preview is no capabilities - * instead of throwing an exception. - * */ -val LocalSession: ProvidableCompositionLocal = - compositionLocalWithComputedDefaultOf { - runCatching { - androidx.xr.compose.platform.LocalSession.currentValue - }.getOrNull() - } - -private object NoSpatialCapabilities : SpatialCapabilities { - override val isSpatialUiEnabled: Boolean - get() = false - override val isContent3dEnabled: Boolean - get() = false - override val isAppEnvironmentEnabled: Boolean - get() = false - override val isPassthroughControlEnabled: Boolean - get() = false - override val isSpatialAudioEnabled: Boolean - get() = false -} - -private object LacksSpatialFeatureSpatialConfiguration : SpatialConfiguration { - override val hasXrSpatialFeature: Boolean - get() = false -} @Preview(device = PIXEL_TABLET, name = "Android XR (Home Space Mode)") annotation class XrHomeSpaceMediumPreview diff --git a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraLayout.kt b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraLayout.kt index 4c4a3860..c50df1ff 100644 --- a/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraLayout.kt +++ b/feature/camera/src/main/java/com/android/developers/androidify/camera/CameraLayout.kt @@ -50,6 +50,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.LifecycleStartEffect +import androidx.xr.compose.platform.LocalSpatialCapabilities import com.android.developers.androidify.camera.xr.CameraLayoutSpatial import com.android.developers.androidify.theme.AndroidifyTheme import com.android.developers.androidify.theme.TertiaryContainer @@ -59,7 +60,6 @@ import com.android.developers.androidify.util.allowsFullContent import com.android.developers.androidify.util.isWidthAtLeastMedium import com.android.developers.androidify.util.shouldShowTabletopLayout import com.android.developers.androidify.util.supportsTabletop -import com.android.developers.androidify.xr.LocalSpatialCapabilities @Composable internal fun CameraLayout( diff --git a/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenLayoutType.kt b/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenLayoutType.kt index 22e3fd3c..0171100a 100644 --- a/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenLayoutType.kt +++ b/feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreenLayoutType.kt @@ -16,8 +16,8 @@ package com.android.developers.androidify.creation import androidx.compose.runtime.Composable +import androidx.xr.compose.platform.LocalSpatialCapabilities import com.android.developers.androidify.util.areBothWindowDimensionsAtLeastMedium -import com.android.developers.androidify.xr.LocalSpatialCapabilities enum class EditScreenLayoutType { Compact, diff --git a/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenHomeSpaceModePreviews.kt b/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenHomeSpaceModePreviews.kt index feabcc16..a81352d0 100644 --- a/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenHomeSpaceModePreviews.kt +++ b/feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenHomeSpaceModePreviews.kt @@ -23,7 +23,6 @@ import com.android.developers.androidify.creation.EditScreen import com.android.developers.androidify.creation.EditScreenLayoutType import com.android.developers.androidify.creation.fakeDropBehaviourFactory import com.android.developers.androidify.theme.SharedElementContextPreview -import com.android.developers.androidify.xr.SupportsFullSpaceModeRequestProvider import com.android.developers.androidify.xr.XrHomeSpaceCompactPreview import com.android.developers.androidify.xr.XrHomeSpaceMediumPreview @@ -32,24 +31,22 @@ import com.android.developers.androidify.xr.XrHomeSpaceMediumPreview @Composable private fun EditScreenMediumXrHomeSpaceModePreview() { SharedElementContextPreview { - SupportsFullSpaceModeRequestProvider { - EditScreen( - snackbarHostState = SnackbarHostState(), - dropBehaviourFactory = fakeDropBehaviourFactory, - onCameraPressed = { }, - uiState = CreationState(), - onChooseImageClicked = {}, - onPromptOptionSelected = {}, - onUndoPressed = {}, - onPromptGenerationPressed = {}, - onBotColorSelected = {}, - onStartClicked = {}, - onDropCallback = {}, - onBackPressed = {}, - onAboutPressed = {}, - layoutType = EditScreenLayoutType.Medium, - ) - } + EditScreen( + snackbarHostState = SnackbarHostState(), + dropBehaviourFactory = fakeDropBehaviourFactory, + onCameraPressed = { }, + uiState = CreationState(), + onChooseImageClicked = {}, + onPromptOptionSelected = {}, + onUndoPressed = {}, + onPromptGenerationPressed = {}, + onBotColorSelected = {}, + onStartClicked = {}, + onDropCallback = {}, + onBackPressed = {}, + onAboutPressed = {}, + layoutType = EditScreenLayoutType.Medium, + ) } } @@ -58,23 +55,21 @@ private fun EditScreenMediumXrHomeSpaceModePreview() { @Composable private fun EditScreenCompactXrHomeSpaceModePreview() { SharedElementContextPreview { - SupportsFullSpaceModeRequestProvider { - EditScreen( - snackbarHostState = SnackbarHostState(), - dropBehaviourFactory = fakeDropBehaviourFactory, - onCameraPressed = { }, - uiState = CreationState(), - onChooseImageClicked = {}, - onPromptOptionSelected = {}, - onUndoPressed = {}, - onPromptGenerationPressed = {}, - onBotColorSelected = {}, - onStartClicked = {}, - onDropCallback = {}, - onBackPressed = {}, - onAboutPressed = {}, - layoutType = EditScreenLayoutType.Compact, - ) - } + EditScreen( + snackbarHostState = SnackbarHostState(), + dropBehaviourFactory = fakeDropBehaviourFactory, + onCameraPressed = { }, + uiState = CreationState(), + onChooseImageClicked = {}, + onPromptOptionSelected = {}, + onUndoPressed = {}, + onPromptGenerationPressed = {}, + onBotColorSelected = {}, + onStartClicked = {}, + onDropCallback = {}, + onBackPressed = {}, + onAboutPressed = {}, + layoutType = EditScreenLayoutType.Compact, + ) } } diff --git a/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreenMedium.kt b/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreenMedium.kt index 6d4cecbb..7109cb4c 100644 --- a/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreenMedium.kt +++ b/feature/home/src/main/java/com/android/developers/androidify/home/HomeScreenMedium.kt @@ -36,7 +36,6 @@ import com.android.developers.androidify.theme.components.AboutButton import com.android.developers.androidify.theme.components.AndroidifyTopAppBar import com.android.developers.androidify.util.LargeScreensPreview import com.android.developers.androidify.xr.RequestFullSpaceIconButton -import com.android.developers.androidify.xr.SupportsFullSpaceModeRequestProvider import com.android.developers.androidify.xr.XrHomeSpaceMediumPreview import com.android.developers.androidify.xr.couldRequestFullSpace @@ -120,15 +119,13 @@ private fun HomeScreenLargeScreensPreview() { @XrHomeSpaceMediumPreview @Composable private fun HomeScreenLargeScreensHomeSpaceModePreview() { - SupportsFullSpaceModeRequestProvider { - SharedElementContextPreview { - HomeScreenContents( - layoutType = HomeScreenLayoutType.Medium, - onClickLetsGo = { }, - videoLink = "", - dancingBotLink = "https://services.google.com/fh/files/misc/android_dancing.gif", - onAboutClicked = {}, - ) - } + SharedElementContextPreview { + HomeScreenContents( + layoutType = HomeScreenLayoutType.Medium, + onClickLetsGo = { }, + videoLink = "", + dancingBotLink = "https://services.google.com/fh/files/misc/android_dancing.gif", + onAboutClicked = {}, + ) } } diff --git a/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenHomeSpaceModePreviews.kt b/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenHomeSpaceModePreviews.kt index 22df109a..7552842d 100644 --- a/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenHomeSpaceModePreviews.kt +++ b/feature/home/src/main/java/com/android/developers/androidify/home/xr/HomeScreenHomeSpaceModePreviews.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Composable import com.android.developers.androidify.home.HomeScreenContents import com.android.developers.androidify.home.HomeScreenLayoutType import com.android.developers.androidify.theme.SharedElementContextPreview -import com.android.developers.androidify.xr.SupportsFullSpaceModeRequestProvider import com.android.developers.androidify.xr.XrHomeSpaceCompactPreview import com.android.developers.androidify.xr.XrHomeSpaceMediumPreview @@ -29,15 +28,13 @@ import com.android.developers.androidify.xr.XrHomeSpaceMediumPreview @Composable private fun HomeScreenMediumXrHomeSpaceModePreview() { SharedElementContextPreview { - SupportsFullSpaceModeRequestProvider { - HomeScreenContents( - layoutType = HomeScreenLayoutType.Medium, - onClickLetsGo = { }, - videoLink = "", - dancingBotLink = "https://services.google.com/fh/files/misc/android_dancing.gif", - onAboutClicked = {}, - ) - } + HomeScreenContents( + layoutType = HomeScreenLayoutType.Medium, + onClickLetsGo = { }, + videoLink = "", + dancingBotLink = "https://services.google.com/fh/files/misc/android_dancing.gif", + onAboutClicked = {}, + ) } } @@ -45,15 +42,13 @@ private fun HomeScreenMediumXrHomeSpaceModePreview() { @XrHomeSpaceCompactPreview @Composable private fun HomeScreenCompactXrHomeSpaceModePreview() { - SupportsFullSpaceModeRequestProvider { - SharedElementContextPreview { - HomeScreenContents( - layoutType = HomeScreenLayoutType.Compact, - onClickLetsGo = {}, - videoLink = "", - dancingBotLink = "https://services.google.com/fh/files/misc/android_dancing.gif", - onAboutClicked = {}, - ) - } + SharedElementContextPreview { + HomeScreenContents( + layoutType = HomeScreenLayoutType.Compact, + onClickLetsGo = {}, + videoLink = "", + dancingBotLink = "https://services.google.com/fh/files/misc/android_dancing.gif", + onAboutClicked = {}, + ) } } diff --git a/feature/results/src/main/java/com/android/developers/androidify/results/ResultsLayoutType.kt b/feature/results/src/main/java/com/android/developers/androidify/results/ResultsLayoutType.kt index 3573e7c6..841498e2 100644 --- a/feature/results/src/main/java/com/android/developers/androidify/results/ResultsLayoutType.kt +++ b/feature/results/src/main/java/com/android/developers/androidify/results/ResultsLayoutType.kt @@ -16,8 +16,8 @@ package com.android.developers.androidify.results import androidx.compose.runtime.Composable +import androidx.xr.compose.platform.LocalSpatialCapabilities import com.android.developers.androidify.util.allowsFullContent -import com.android.developers.androidify.xr.LocalSpatialCapabilities enum class ResultsLayoutType { Verbose, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3197e418..1efa59f7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -79,7 +79,7 @@ mlkitSegmentation = "16.0.0-beta1" playServicesBase = "18.9.0" timber = "5.0.1" workRuntimeKtx = "2.10.5" -xr-compose = "1.0.0-alpha07" +xr-compose = "1.0.0-alpha11" [libraries] accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }