rememberAmbientModeManager

Functions summary

AmbientModeManager

Creates, remembers, and manages the lifecycle of the default AmbientModeManager implementation.

Functions

rememberAmbientModeManager

@Composable
fun rememberAmbientModeManager(): AmbientModeManager

Creates, remembers, and manages the lifecycle of the default AmbientModeManager implementation.

This function requires a LocalActivity be present and automatically enables Always-On mode for that activity, ensuring it remains visible in the low-power ambient state.

The resulting AmbientModeManager is retained across recompositions via remember and its system listeners are automatically registered and unregistered using DisposableEffect, tying the ambient tracking to the composition lifecycle.

See the Android documentation for more details on enabling Always-On mode: https://developer.android.com/training/wearables/views/always-on

Example of a simple screen switching between Interactive and Ambient modes:

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.wear.compose.foundation.AmbientMode
import androidx.wear.compose.foundation.LocalAmbientModeManager
import androidx.wear.compose.foundation.rememberAmbientModeManager
import androidx.wear.compose.material.Text

// **Best Practice Note:** In a production application, the AmbientModeManager should be
// instantiated and provided at the highest level of the Compose hierarchy (typically in
// the host Activity's setContent block) using a CompositionLocalProvider. This ensures
// proper lifecycle management and broad accessibility.

// For this self-contained demo, AmbientModeManager is created and provided locally:
val activityAmbientModeManager = rememberAmbientModeManager()
CompositionLocalProvider(LocalAmbientModeManager provides activityAmbientModeManager) {
    val ambientModeManager = LocalAmbientModeManager.current
    val ambientMode = ambientModeManager?.currentAmbientMode
    Column(
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = Modifier.fillMaxSize(),
    ) {
        val ambientModeName =
            when (ambientMode) {
                is AmbientMode.Interactive -> "Interactive"
                is AmbientMode.Ambient -> "Ambient"
                else -> "Unknown"
            }

        val color = if (ambientMode is AmbientMode.Ambient) Color.Gray else Color.Yellow
        Text(text = "$ambientModeName Mode", color = color)
    }
}
Returns
AmbientModeManager

A new or remembered AmbientModeManager instance.