rememberSpatialActivityPanelController

Functions summary

Functions

rememberSpatialActivityPanelController

@Composable
fun rememberSpatialActivityPanelController(initialIntent: Intent): SpatialActivityPanelController

Creates and remembers a SpatialActivityPanelController across recompositions.

The provided initialIntent is only queued when the controller is initially created. Subsequent recompositions with a different intent will be ignored. To add new intents dynamically after creation, use SpatialActivityPanelController.startActivity. To replace the panel and its task stack with a new intent entirely, key the composition on the intent (e.g., using key(intent)).

import androidx.compose.runtime.remember
import androidx.xr.compose.spatial.Subspace
import androidx.xr.compose.subspace.SpatialActivityPanel
import androidx.xr.compose.subspace.rememberSpatialActivityPanelController

// Because the controller is remembered, passing a different intent parameter
// on recomposition will not update the controller or launch a new activity.
val controller = rememberSpatialActivityPanelController(intent)

Subspace { SpatialActivityPanel(controller = controller) }
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.xr.compose.spatial.Subspace
import androidx.xr.compose.subspace.SpatialActivityPanel
import androidx.xr.compose.subspace.rememberSpatialActivityPanelController

val context = LocalContext.current
var selectedEmailId by remember { mutableStateOf<String?>(null) }

Column {
    Button(onClick = { selectedEmailId = "email_1" }) { Text("Open Email 1") }

    Button(onClick = { selectedEmailId = "email_2" }) { Text("Open Email 2") }

    if (selectedEmailId != null) {
        Subspace {
            // Using Compose key to force recreation of the controller and
            // the panel whenever the selected email changes. This tears down
            // the old activity stack and starts a new one for the new email.
            key(selectedEmailId) {
                val intent =
                    Intent(context, NewEmailActivity::class.java).apply {
                        putExtra("EMAIL_ID", selectedEmailId)
                    }
                SpatialActivityPanel(
                    controller = rememberSpatialActivityPanelController(intent)
                )
            }
        }
    }
}
Parameters
initialIntent: Intent

The initial Intent to queue for execution inside the activity panel.