diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9880f60b..e8809a11 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,9 @@ android:name="android.hardware.camera" android:required="true" /> + + + diff --git a/core/xr/src/main/java/com/android/developers/androidify/xr/MainPanelWorkaround.kt b/core/xr/src/main/java/com/android/developers/androidify/xr/MainPanelWorkaround.kt index 265cec34..dcf4da30 100644 --- a/core/xr/src/main/java/com/android/developers/androidify/xr/MainPanelWorkaround.kt +++ b/core/xr/src/main/java/com/android/developers/androidify/xr/MainPanelWorkaround.kt @@ -16,25 +16,24 @@ package com.android.developers.androidify.xr import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.DisposableEffect import androidx.xr.compose.platform.LocalSession import androidx.xr.scenecore.scene -import kotlinx.coroutines.delay /* - * A composable that attempts to continually hide the mainPanel. + * A composable that hides the mainPanel when it is disposed. When placed outside of an (Application)Subspace, + * this composable will be disposed after the Subspace, hiding the mainPanelEntity again. * - * This is a temporary workaround for b/440325404, that causes the mainPanelEntity when an + * This is a temporary workaround for b/440325404, that causes the mainPanelEntity to appear when an * ApplicationSubspace transitions out of the composition due to a race condition when transitioning * the two hierarchies. */ @Composable fun MainPanelWorkaround() { - val session = LocalSession.current - LaunchedEffect(null) { - while (true) { - delay(100L) - session?.scene?.mainPanelEntity?.setEnabled(false) + val session = LocalSession.current ?: return + DisposableEffect(session) { + onDispose { + session.scene.mainPanelEntity.setEnabled(false) } } } 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 ad347484..6eaa5be9 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 @@ -75,8 +75,8 @@ fun EditScreenSpatial( onDropCallback: (Uri) -> Unit = {}, ) { DisableSharedTransition { + MainPanelWorkaround() SquiggleBackgroundSubspace(minimumHeight = 600.dp) { - MainPanelWorkaround() SpatialColumn(SubspaceModifier.fillMaxWidth()) { SpatialPanel( SubspaceModifier.offset(z = 10.dp) 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 c0c9c239..9b315282 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 @@ -52,12 +52,12 @@ private const val squiggleSafeContentHeight = 0.6f fun LoadingScreenSpatial( onCancelPress: () -> Unit, ) { + MainPanelWorkaround() BackgroundSubspace( aspectRatio = 1.4f, minimumHeight = 500.dp, drawable = CreationR.drawable.squiggle_light, ) { - MainPanelWorkaround() Orbiter( position = ContentEdge.Top, offsetType = OrbiterOffsetType.OuterEdge, 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 f49c8117..759bb33d 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 @@ -33,8 +33,8 @@ import com.android.developers.androidify.xr.SquiggleBackgroundSubspace @Composable fun AboutScreenSpatial(onBackPressed: () -> Unit, bottomButtons: @Composable () -> Unit) { + MainPanelWorkaround() SquiggleBackgroundSubspace(500.dp) { - MainPanelWorkaround() SpatialPanel { Orbiter( ContentEdge.Top, 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 03024019..06106d21 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 @@ -69,8 +69,8 @@ fun HomeScreenContentsSpatial( onAboutClicked: () -> Unit, ) { DisableSharedTransition { + MainPanelWorkaround() SquiggleBackgroundSubspace(minimumHeight = 600.dp) { - MainPanelWorkaround() Orbiter( position = ContentEdge.Top, offsetType = OrbiterOffsetType.OuterEdge, 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 cf3f9cf5..d5ffccd5 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 @@ -59,9 +59,8 @@ fun ResultsScreenSpatial( ) { var offsetPose by remember { mutableStateOf(Pose()) } DisableSharedTransition { + MainPanelWorkaround() Subspace { - MainPanelWorkaround() - SpatialPanel( SubspaceModifier .offset(z = 5.dp)