diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/room/AudioRoomFullScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/room/AudioRoomFullScreen.kt
index 2fa567134e..aa7e311a85 100644
--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/room/AudioRoomFullScreen.kt
+++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/room/AudioRoomFullScreen.kt
@@ -40,6 +40,7 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
@@ -103,6 +104,25 @@ internal fun AudioRoomFullScreen(
)
}
+ // Listener counter — counts every active kind-10312 presence
+ // in the room. Hidden until the aggregator has at least one
+ // entry so the placeholder doesn't flash on entry.
+ val presences by viewModel.presences.collectAsState()
+ val listenerCount = presences.size
+ if (listenerCount > 0) {
+ Text(
+ text =
+ androidx.compose.ui.res.pluralStringResource(
+ R.plurals.audio_room_listener_count,
+ listenerCount,
+ listenerCount,
+ ),
+ style = MaterialTheme.typography.bodySmall,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ modifier = Modifier.padding(top = 4.dp),
+ )
+ }
+
if (onStage.isNotEmpty()) {
StagePeopleRow(
label = stringRes(R.string.audio_room_stage),
diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml
index ba13d443e0..18b489eb66 100644
--- a/amethyst/src/main/res/values/strings.xml
+++ b/amethyst/src/main/res/values/strings.xml
@@ -521,6 +521,10 @@
Stop
Join audio room
Leave
+
+ - %1$d listener
+ - %1$d listeners
+
Start space
Start a new audio room
Room name