@@ -36,6 +36,8 @@ import androidx.xr.glimmer.GlimmerTheme
3636import androidx.xr.glimmer.Text
3737import androidx.xr.glimmer.surface
3838import androidx.xr.projected.ProjectedDisplayController
39+ import androidx.xr.projected.ProjectedDeviceController
40+ import androidx.xr.projected.ProjectedDeviceController.Capability.Companion.CAPABILITY_VISUAL_UI
3941import androidx.xr.projected.experimental.ExperimentalProjectedApi
4042import kotlinx.coroutines.launch
4143
@@ -48,19 +50,27 @@ class GlassesMainActivity : ComponentActivity() {
4850 val viewModel: GlassesViewModel by viewModels()
4951
5052 lifecycleScope.launch {
51- val controller = ProjectedDisplayController .create(this @GlassesMainActivity)
53+ // [START androidxr_projected_device_capabilities_check]
54+ // Check device capabilities
55+ val projectedDeviceController = ProjectedDeviceController .create(this @GlassesMainActivity)
56+ val isVisualSupported = projectedDeviceController.capabilities.contains(CAPABILITY_VISUAL_UI )
5257
58+ viewModel.setVisualUiSupported(isVisualSupported)
59+ // [END androidxr_projected_device_capabilities_check]
60+
61+ val displayController = ProjectedDisplayController .create(this @GlassesMainActivity)
5362 val observer = GlassesLifecycleObserver (
5463 context = this @GlassesMainActivity,
55- controller = controller ,
64+ controller = displayController ,
5665 onVisualsChanged = viewModel::updateVisuals
5766 )
5867 lifecycle.addObserver(observer)
5968
60- // Cleanup observer to close the controller
69+
70+ // Cleanup observer to close the display controller
6171 lifecycle.addObserver(object : DefaultLifecycleObserver {
6272 override fun onDestroy (owner : LifecycleOwner ) {
63- controller .close()
73+ displayController .close()
6474 }
6575 })
6676 }
@@ -72,6 +82,7 @@ class GlassesMainActivity : ComponentActivity() {
7282 GlimmerTheme {
7383 HomeScreen (
7484 visualsOn = uiState.areVisualsOn,
85+ isVisualUiSupported = uiState.isVisualUiSupported,
7586 onClose = { finish() }
7687 )
7788 }
@@ -84,6 +95,7 @@ class GlassesMainActivity : ComponentActivity() {
8495@Composable
8596fun HomeScreen (
8697 visualsOn : Boolean ,
98+ isVisualUiSupported : Boolean ,
8799 onClose : () -> Unit ,
88100 modifier : Modifier = Modifier
89101) {
@@ -93,19 +105,23 @@ fun HomeScreen(
93105 .fillMaxSize(),
94106 contentAlignment = Alignment .Center
95107 ) {
96- Card (
97- title = { Text (" Android XR" ) },
98- action = {
99- Button (onClick = onClose) {
100- Text (" Close" )
108+ if (isVisualUiSupported) {
109+ Card (
110+ title = { Text (" Android XR" ) },
111+ action = {
112+ Button (onClick = onClose) {
113+ Text (" Close" )
114+ }
115+ }
116+ ) {
117+ if (visualsOn) {
118+ Text (" Hello, AI Glasses!" )
119+ } else {
120+ Text (" Display is off. Audio guidance active." )
101121 }
102122 }
103- ) {
104- if (visualsOn) {
105- Text (" Hello, AI Glasses!" )
106- } else {
107- Text (" Display is off. Audio guidance active." )
108- }
123+ } else {
124+ Text (" Audio Guidance Mode Active" )
109125 }
110126 }
111127}
0 commit comments