Skip to content

Commit d22ea4c

Browse files
committed
add in device capabilty check
1 parent e44fb10 commit d22ea4c

File tree

2 files changed

+37
-16
lines changed

2 files changed

+37
-16
lines changed

xr/src/main/java/com/example/xr/projected/GlassesMainActivity.kt

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import androidx.xr.glimmer.GlimmerTheme
3636
import androidx.xr.glimmer.Text
3737
import androidx.xr.glimmer.surface
3838
import androidx.xr.projected.ProjectedDisplayController
39+
import androidx.xr.projected.ProjectedDeviceController
40+
import androidx.xr.projected.ProjectedDeviceController.Capability.Companion.CAPABILITY_VISUAL_UI
3941
import androidx.xr.projected.experimental.ExperimentalProjectedApi
4042
import 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
8596
fun 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
}

xr/src/main/java/com/example/xr/projected/GlassesViewModel.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,17 @@ import kotlinx.coroutines.flow.asStateFlow
2323
import kotlinx.coroutines.flow.update
2424

2525
data class GlassesUiState(
26-
val areVisualsOn: Boolean = true
26+
val areVisualsOn: Boolean = true,
27+
val isVisualUiSupported: Boolean = false
2728
)
2829
class GlassesViewModel : ViewModel() {
2930
private val _uiState = MutableStateFlow(GlassesUiState())
3031
val uiState: StateFlow<GlassesUiState> = _uiState.asStateFlow()
3132

33+
fun setVisualUiSupported(isSupported: Boolean) {
34+
_uiState.update { it.copy(isVisualUiSupported = isSupported) }
35+
}
36+
3237
fun updateVisuals(visualsOn: Boolean) {
3338
_uiState.update { it.copy(areVisualsOn = visualsOn) }
3439
}

0 commit comments

Comments
 (0)