Skip to content

Commit 51fd312

Browse files
authored
Merge branch 'main' into feature/png
2 parents cfb8054 + 14fb11e commit 51fd312

File tree

19 files changed

+515
-168
lines changed

19 files changed

+515
-168
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
android:name="android.hardware.camera"
2424
android:required="true" />
2525

26+
<!-- Androidify can use XR features if they're available; they're not required. -->
27+
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
28+
2629
<uses-permission android:name="android.permission.CAMERA" />
2730
<uses-sdk tools:overrideLibrary="com.google.ai.edge.aicore" />
2831

app/src/main/java/com/android/developers/androidify/navigation/MainNavigation.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.compose.runtime.mutableStateOf
3131
import androidx.compose.runtime.remember
3232
import androidx.compose.runtime.setValue
3333
import androidx.compose.ui.platform.LocalContext
34+
import androidx.compose.ui.platform.LocalUriHandler
3435
import androidx.compose.ui.unit.IntOffset
3536
import androidx.hilt.navigation.compose.hiltViewModel
3637
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
@@ -184,13 +185,20 @@ fun MainNavigation() {
184185
}
185186
entry<About> {
186187
val context = LocalContext.current
188+
val uriHandler = LocalUriHandler.current
187189
AboutScreen(
188190
onBackPressed = {
189191
backStack.removeLastOrNull()
190192
},
191193
onLicensesClicked = {
192194
context.startActivity(Intent(context, OssLicensesMenuActivity::class.java))
193195
},
196+
onPrivacyClicked = {
197+
uriHandler.openUri("https://policies.google.com/privacy")
198+
},
199+
onTermsClicked = {
200+
uriHandler.openUri("https://policies.google.com/terms")
201+
}
194202
)
195203
}
196204
},

core/xr/src/main/java/com/android/developers/androidify/xr/MainPanelWorkaround.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,24 @@
1616
package com.android.developers.androidify.xr
1717

1818
import androidx.compose.runtime.Composable
19-
import androidx.compose.runtime.LaunchedEffect
19+
import androidx.compose.runtime.DisposableEffect
2020
import androidx.xr.compose.platform.LocalSession
2121
import androidx.xr.scenecore.scene
22-
import kotlinx.coroutines.delay
2322

2423
/*
25-
* A composable that attempts to continually hide the mainPanel.
24+
* A composable that hides the mainPanel when it is disposed. When placed outside of an (Application)Subspace,
25+
* this composable will be disposed after the Subspace, hiding the mainPanelEntity again.
2626
*
27-
* This is a temporary workaround for b/440325404, that causes the mainPanelEntity when an
27+
* This is a temporary workaround for b/440325404, that causes the mainPanelEntity to appear when an
2828
* ApplicationSubspace transitions out of the composition due to a race condition when transitioning
2929
* the two hierarchies.
3030
*/
3131
@Composable
3232
fun MainPanelWorkaround() {
33-
val session = LocalSession.current
34-
LaunchedEffect(null) {
35-
while (true) {
36-
delay(100L)
37-
session?.scene?.mainPanelEntity?.setEnabled(false)
33+
val session = LocalSession.current ?: return
34+
DisposableEffect(session) {
35+
onDispose {
36+
session.scene.mainPanelEntity.setEnabled(false)
3837
}
3938
}
4039
}

core/xr/src/main/java/com/android/developers/androidify/xr/SpatialComponents.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ import androidx.compose.ui.tooling.preview.Preview
3030
import androidx.compose.ui.unit.Dp
3131
import androidx.compose.ui.unit.dp
3232
import androidx.xr.compose.spatial.Subspace
33+
import androidx.xr.compose.subspace.MovePolicy
34+
import androidx.xr.compose.subspace.ResizePolicy
3335
import androidx.xr.compose.subspace.SpatialBox
3436
import androidx.xr.compose.subspace.SpatialBoxScope
3537
import androidx.xr.compose.subspace.SpatialPanel
3638
import androidx.xr.compose.subspace.SubspaceComposable
37-
import androidx.xr.compose.subspace.layout.MoveEvent
39+
import androidx.xr.compose.subspace.layout.SpatialMoveEvent
3840
import androidx.xr.compose.subspace.layout.SubspaceModifier
3941
import androidx.xr.compose.subspace.layout.aspectRatio
4042
import androidx.xr.compose.subspace.layout.fillMaxSize
4143
import androidx.xr.compose.subspace.layout.fillMaxWidth
42-
import androidx.xr.compose.subspace.layout.movable
4344
import androidx.xr.compose.subspace.layout.offset
44-
import androidx.xr.compose.subspace.layout.resizable
4545
import androidx.xr.compose.unit.DpVolumeSize
4646
import com.android.developers.androidify.theme.AndroidifyTheme
4747

@@ -53,7 +53,7 @@ import com.android.developers.androidify.theme.AndroidifyTheme
5353
@Composable
5454
fun SquiggleBackgroundSubspace(
5555
minimumHeight: Dp,
56-
onMove: ((MoveEvent) -> Boolean)? = null,
56+
onMove: ((SpatialMoveEvent) -> Boolean)? = null,
5757
content:
5858
@SubspaceComposable @Composable
5959
SpatialBoxScope.() -> Unit,
@@ -72,21 +72,21 @@ fun BackgroundSubspace(
7272
aspectRatio: Float,
7373
@DrawableRes drawable: Int,
7474
minimumHeight: Dp,
75-
onMove: ((MoveEvent) -> Boolean)? = null,
75+
onMove: ((SpatialMoveEvent) -> Boolean)? = null,
7676
content:
7777
@SubspaceComposable @Composable
7878
SpatialBoxScope.() -> Unit,
7979
) {
8080
Subspace {
8181
SpatialPanel(
8282
SubspaceModifier
83-
.movable(onMove = onMove)
84-
.resizable(
85-
minimumSize = DpVolumeSize(0.dp, minimumHeight, 0.dp),
86-
maintainAspectRatio = true,
87-
)
8883
.fillMaxWidth()
8984
.aspectRatio(aspectRatio),
85+
dragPolicy = MovePolicy(onMove = onMove),
86+
resizePolicy = ResizePolicy(
87+
minimumSize = DpVolumeSize(0.dp, minimumHeight, 0.dp),
88+
shouldMaintainAspectRatio = true,
89+
),
9090
) {
9191
FillBackground(drawable)
9292
Subspace {

feature/creation/src/main/java/com/android/developers/androidify/creation/EditScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ fun EditScreenScaffoldWithAppBar(
151151
},
152152
actions = {
153153
AboutButton { onAboutPressed() }
154-
if (couldRequestFullSpace()) {
154+
if (uiState.xrEnabled && couldRequestFullSpace()) {
155155
RequestFullSpaceIconButton()
156156
}
157157
},

feature/creation/src/main/java/com/android/developers/androidify/creation/xr/EditScreenSpatial.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ fun EditScreenSpatial(
7575
onDropCallback: (Uri) -> Unit = {},
7676
) {
7777
DisableSharedTransition {
78+
MainPanelWorkaround()
7879
SquiggleBackgroundSubspace(minimumHeight = 600.dp) {
79-
MainPanelWorkaround()
8080
SpatialColumn(SubspaceModifier.fillMaxWidth()) {
8181
SpatialPanel(
8282
SubspaceModifier.offset(z = 10.dp)

feature/creation/src/main/java/com/android/developers/androidify/creation/xr/LoadingScreenSpatial.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ private const val squiggleSafeContentHeight = 0.6f
5252
fun LoadingScreenSpatial(
5353
onCancelPress: () -> Unit,
5454
) {
55+
MainPanelWorkaround()
5556
BackgroundSubspace(
5657
aspectRatio = 1.4f,
5758
minimumHeight = 500.dp,
5859
drawable = CreationR.drawable.squiggle_light,
5960
) {
60-
MainPanelWorkaround()
6161
Orbiter(
6262
position = ContentEdge.Top,
6363
offsetType = OrbiterOffsetType.OuterEdge,

0 commit comments

Comments
 (0)