Adjustments to the loading and updating of the nest event in a PiPActivity
This commit is contained in:
-5
@@ -77,11 +77,6 @@ fun RenderLiveActivityBubble(
|
|||||||
NestActivity.launch(
|
NestActivity.launch(
|
||||||
context = context,
|
context = context,
|
||||||
addressValue = meetingEvent.address().toValue(),
|
addressValue = meetingEvent.address().toValue(),
|
||||||
authBaseUrl = service,
|
|
||||||
endpoint = endpoint,
|
|
||||||
hostPubkey = meetingEvent.pubKey,
|
|
||||||
roomId = dTag,
|
|
||||||
kind = meetingEvent.kind,
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
// Fall back to the channel route so the user
|
// Fall back to the channel route so the user
|
||||||
|
|||||||
-5
@@ -149,11 +149,6 @@ private fun NestFeedCard(
|
|||||||
NestActivity.launch(
|
NestActivity.launch(
|
||||||
context = context,
|
context = context,
|
||||||
addressValue = meetingEvent.address().toValue(),
|
addressValue = meetingEvent.address().toValue(),
|
||||||
authBaseUrl = service,
|
|
||||||
endpoint = endpoint,
|
|
||||||
hostPubkey = meetingEvent.pubKey,
|
|
||||||
roomId = dTag,
|
|
||||||
kind = meetingEvent.kind,
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
nav.nav { routeFor(baseNote, accountViewModel.account) }
|
nav.nav { routeFor(baseNote, accountViewModel.account) }
|
||||||
|
|||||||
-5
@@ -195,11 +195,6 @@ fun CreateNestSheet(
|
|||||||
NestActivity.launch(
|
NestActivity.launch(
|
||||||
context = context,
|
context = context,
|
||||||
addressValue = launchInfo.addressValue,
|
addressValue = launchInfo.addressValue,
|
||||||
authBaseUrl = launchInfo.authBaseUrl,
|
|
||||||
endpoint = launchInfo.endpoint,
|
|
||||||
hostPubkey = launchInfo.hostPubkey,
|
|
||||||
roomId = launchInfo.roomId,
|
|
||||||
kind = launchInfo.kind,
|
|
||||||
)
|
)
|
||||||
onDismiss()
|
onDismiss()
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-35
@@ -98,18 +98,7 @@ class NestActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
val accountViewModel = NestBridge.accountViewModel
|
val accountViewModel = NestBridge.accountViewModel
|
||||||
val addressValue = intent.getStringExtra(EXTRA_ADDRESS)
|
val addressValue = intent.getStringExtra(EXTRA_ADDRESS)
|
||||||
val authBaseUrl = intent.getStringExtra(EXTRA_AUTH_BASE_URL)
|
if (accountViewModel == null || addressValue == null) {
|
||||||
val endpoint = intent.getStringExtra(EXTRA_ENDPOINT)
|
|
||||||
val hostPubkey = intent.getStringExtra(EXTRA_HOST_PUBKEY)
|
|
||||||
val roomId = intent.getStringExtra(EXTRA_ROOM_ID)
|
|
||||||
val kind = intent.getIntExtra(EXTRA_KIND, com.vitorpamplona.nestsclient.NestsRoomConfig.MEETING_SPACE_KIND)
|
|
||||||
if (accountViewModel == null ||
|
|
||||||
addressValue == null ||
|
|
||||||
authBaseUrl == null ||
|
|
||||||
endpoint == null ||
|
|
||||||
hostPubkey == null ||
|
|
||||||
roomId == null
|
|
||||||
) {
|
|
||||||
// After process death the bridge is empty (the previous
|
// After process death the bridge is empty (the previous
|
||||||
// process's AccountViewModel is gone). Bounce the user back to
|
// process's AccountViewModel is gone). Bounce the user back to
|
||||||
// MainActivity so they land on the lobby instead of a black
|
// MainActivity so they land on the lobby instead of a black
|
||||||
@@ -147,14 +136,6 @@ class NestActivity : AppCompatActivity() {
|
|||||||
AmethystTheme {
|
AmethystTheme {
|
||||||
NestActivityContent(
|
NestActivityContent(
|
||||||
addressValue = addressValue,
|
addressValue = addressValue,
|
||||||
room =
|
|
||||||
com.vitorpamplona.nestsclient.NestsRoomConfig(
|
|
||||||
authBaseUrl = authBaseUrl,
|
|
||||||
endpoint = endpoint,
|
|
||||||
hostPubkey = hostPubkey,
|
|
||||||
roomId = roomId,
|
|
||||||
kind = kind,
|
|
||||||
),
|
|
||||||
accountViewModel = accountViewModel,
|
accountViewModel = accountViewModel,
|
||||||
isInPipMode = isInPipMode.value,
|
isInPipMode = isInPipMode.value,
|
||||||
onMuteState = { muted ->
|
onMuteState = { muted ->
|
||||||
@@ -252,11 +233,6 @@ class NestActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val EXTRA_ADDRESS = "com.vitorpamplona.amethyst.NEST_ADDRESS"
|
const val EXTRA_ADDRESS = "com.vitorpamplona.amethyst.NEST_ADDRESS"
|
||||||
const val EXTRA_AUTH_BASE_URL = "com.vitorpamplona.amethyst.NEST_AUTH_BASE_URL"
|
|
||||||
const val EXTRA_ENDPOINT = "com.vitorpamplona.amethyst.NEST_ENDPOINT"
|
|
||||||
const val EXTRA_HOST_PUBKEY = "com.vitorpamplona.amethyst.NEST_HOST_PUBKEY"
|
|
||||||
const val EXTRA_ROOM_ID = "com.vitorpamplona.amethyst.NEST_ROOM_ID"
|
|
||||||
const val EXTRA_KIND = "com.vitorpamplona.amethyst.NEST_KIND"
|
|
||||||
private const val ACTION_PIP_TOGGLE_MUTE = "com.vitorpamplona.amethyst.NEST_PIP_MUTE"
|
private const val ACTION_PIP_TOGGLE_MUTE = "com.vitorpamplona.amethyst.NEST_PIP_MUTE"
|
||||||
private const val ACTION_PIP_LEAVE = "com.vitorpamplona.amethyst.NEST_PIP_LEAVE"
|
private const val ACTION_PIP_LEAVE = "com.vitorpamplona.amethyst.NEST_PIP_LEAVE"
|
||||||
private const val PIP_MUTE_REQ = 0x6A001
|
private const val PIP_MUTE_REQ = 0x6A001
|
||||||
@@ -265,21 +241,11 @@ class NestActivity : AppCompatActivity() {
|
|||||||
fun launch(
|
fun launch(
|
||||||
context: Context,
|
context: Context,
|
||||||
addressValue: String,
|
addressValue: String,
|
||||||
authBaseUrl: String,
|
|
||||||
endpoint: String,
|
|
||||||
hostPubkey: String,
|
|
||||||
roomId: String,
|
|
||||||
kind: Int,
|
|
||||||
) {
|
) {
|
||||||
context.startActivity(
|
context.startActivity(
|
||||||
Intent(context, NestActivity::class.java).apply {
|
Intent(context, NestActivity::class.java).apply {
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
putExtra(EXTRA_ADDRESS, addressValue)
|
putExtra(EXTRA_ADDRESS, addressValue)
|
||||||
putExtra(EXTRA_AUTH_BASE_URL, authBaseUrl)
|
|
||||||
putExtra(EXTRA_ENDPOINT, endpoint)
|
|
||||||
putExtra(EXTRA_HOST_PUBKEY, hostPubkey)
|
|
||||||
putExtra(EXTRA_ROOM_ID, roomId)
|
|
||||||
putExtra(EXTRA_KIND, kind)
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-17
@@ -27,9 +27,14 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
|
import com.vitorpamplona.amethyst.commons.model.AddressableNote
|
||||||
|
import com.vitorpamplona.amethyst.commons.viewmodels.NestViewModel
|
||||||
|
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNoteEvent
|
||||||
import com.vitorpamplona.amethyst.ui.note.LoadAddressableNote
|
import com.vitorpamplona.amethyst.ui.note.LoadAddressableNote
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.nests.datasource.NestRoomFilterAssemblerSubscription
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.nests.datasource.NestRoomFilterAssemblerSubscription
|
||||||
|
import com.vitorpamplona.nestsclient.NestsRoomConfig
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.Address
|
import com.vitorpamplona.quartz.nip01Core.core.Address
|
||||||
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingSpaceEvent
|
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingSpaceEvent
|
||||||
import com.vitorpamplona.quartz.nip53LiveActivities.streaming.tags.ROLE
|
import com.vitorpamplona.quartz.nip53LiveActivities.streaming.tags.ROLE
|
||||||
@@ -43,7 +48,6 @@ import kotlinx.coroutines.flow.SharedFlow
|
|||||||
@Composable
|
@Composable
|
||||||
internal fun NestActivityContent(
|
internal fun NestActivityContent(
|
||||||
addressValue: String,
|
addressValue: String,
|
||||||
room: com.vitorpamplona.nestsclient.NestsRoomConfig,
|
|
||||||
accountViewModel: AccountViewModel,
|
accountViewModel: AccountViewModel,
|
||||||
isInPipMode: Boolean,
|
isInPipMode: Boolean,
|
||||||
onMuteState: (Boolean) -> Unit,
|
onMuteState: (Boolean) -> Unit,
|
||||||
@@ -61,18 +65,37 @@ internal fun NestActivityContent(
|
|||||||
|
|
||||||
LoadAddressableNote(parsedAddress, accountViewModel) { addressableNote ->
|
LoadAddressableNote(parsedAddress, accountViewModel) { addressableNote ->
|
||||||
addressableNote ?: return@LoadAddressableNote
|
addressableNote ?: return@LoadAddressableNote
|
||||||
val event = addressableNote.event as? MeetingSpaceEvent ?: return@LoadAddressableNote
|
val event by observeNoteEvent<MeetingSpaceEvent>(addressableNote, accountViewModel)
|
||||||
NestActivityBody(
|
|
||||||
event = event,
|
event?.let {
|
||||||
roomNote = addressableNote,
|
val service = it.service()
|
||||||
room = room,
|
val endPoint = it.endpoint()
|
||||||
accountViewModel = accountViewModel,
|
if (service != null && endPoint != null) {
|
||||||
isInPipMode = isInPipMode,
|
val viewModel =
|
||||||
onMuteState = onMuteState,
|
rememberNestViewModel(
|
||||||
onConnectedChange = onConnectedChange,
|
NestsRoomConfig(
|
||||||
pipMuteSignal = pipMuteSignal,
|
authBaseUrl = service,
|
||||||
onLeave = onLeave,
|
endpoint = endPoint,
|
||||||
)
|
hostPubkey = it.pubKey,
|
||||||
|
roomId = it.dTag(),
|
||||||
|
kind = it.kind,
|
||||||
|
),
|
||||||
|
accountViewModel.account.signer,
|
||||||
|
)
|
||||||
|
|
||||||
|
NestActivityBody(
|
||||||
|
event = it,
|
||||||
|
roomNote = addressableNote,
|
||||||
|
viewModel = viewModel,
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
isInPipMode = isInPipMode,
|
||||||
|
onMuteState = onMuteState,
|
||||||
|
onConnectedChange = onConnectedChange,
|
||||||
|
pipMuteSignal = pipMuteSignal,
|
||||||
|
onLeave = onLeave,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,8 +113,8 @@ internal fun NestActivityContent(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun NestActivityBody(
|
private fun NestActivityBody(
|
||||||
event: MeetingSpaceEvent,
|
event: MeetingSpaceEvent,
|
||||||
roomNote: com.vitorpamplona.amethyst.model.AddressableNote,
|
roomNote: AddressableNote,
|
||||||
room: com.vitorpamplona.nestsclient.NestsRoomConfig,
|
viewModel: NestViewModel,
|
||||||
accountViewModel: AccountViewModel,
|
accountViewModel: AccountViewModel,
|
||||||
isInPipMode: Boolean,
|
isInPipMode: Boolean,
|
||||||
onMuteState: (Boolean) -> Unit,
|
onMuteState: (Boolean) -> Unit,
|
||||||
@@ -101,7 +124,7 @@ private fun NestActivityBody(
|
|||||||
) {
|
) {
|
||||||
val account = accountViewModel.account
|
val account = accountViewModel.account
|
||||||
val localPubkey = account.signer.pubKey
|
val localPubkey = account.signer.pubKey
|
||||||
val roomATag = remember(event) { event.address().toValue() }
|
val roomATag = roomNote.idHex
|
||||||
|
|
||||||
// Static room layout: hosts + speakers from the kind-30312 `p`-tags.
|
// Static room layout: hosts + speakers from the kind-30312 `p`-tags.
|
||||||
// The grid renderer derives audience from the kind-10312 presence
|
// The grid renderer derives audience from the kind-10312 presence
|
||||||
@@ -116,7 +139,6 @@ private fun NestActivityBody(
|
|||||||
}
|
}
|
||||||
val onStageKeys = remember(onStage) { onStage.map { it.pubKey }.toSet() }
|
val onStageKeys = remember(onStage) { onStage.map { it.pubKey }.toSet() }
|
||||||
|
|
||||||
val viewModel = rememberNestViewModel(room, account.signer)
|
|
||||||
AutoConnectAndTrackSpeakers(viewModel, onStageKeys)
|
AutoConnectAndTrackSpeakers(viewModel, onStageKeys)
|
||||||
|
|
||||||
// Single REQ per relay covering chat, presence, reactions, admin
|
// Single REQ per relay covering chat, presence, reactions, admin
|
||||||
|
|||||||
+7
-26
@@ -48,7 +48,6 @@ import androidx.compose.material3.OutlinedButton
|
|||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextButton
|
import androidx.compose.material3.TextButton
|
||||||
import androidx.compose.material3.TopAppBar
|
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
@@ -72,6 +71,8 @@ import com.vitorpamplona.amethyst.commons.viewmodels.ConnectionUiState
|
|||||||
import com.vitorpamplona.amethyst.commons.viewmodels.NestUiState
|
import com.vitorpamplona.amethyst.commons.viewmodels.NestUiState
|
||||||
import com.vitorpamplona.amethyst.commons.viewmodels.NestViewModel
|
import com.vitorpamplona.amethyst.commons.viewmodels.NestViewModel
|
||||||
import com.vitorpamplona.amethyst.commons.viewmodels.RoomTheme
|
import com.vitorpamplona.amethyst.commons.viewmodels.RoomTheme
|
||||||
|
import com.vitorpamplona.amethyst.commons.viewmodels.buildParticipantGrid
|
||||||
|
import com.vitorpamplona.amethyst.ui.navigation.topbars.ShorterTopAppBar
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.quartz.nip01Core.tags.aTag.ATag
|
import com.vitorpamplona.quartz.nip01Core.tags.aTag.ATag
|
||||||
@@ -151,17 +152,15 @@ internal fun NestFullScreen(
|
|||||||
Column(
|
Column(
|
||||||
modifier =
|
modifier =
|
||||||
Modifier
|
Modifier
|
||||||
.weight(1f, fill = false)
|
.weight(1f)
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState())
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp),
|
||||||
.padding(top = 8.dp),
|
|
||||||
) {
|
) {
|
||||||
event.summary()?.let {
|
event.summary()?.let {
|
||||||
Text(
|
Text(
|
||||||
text = it,
|
text = it,
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
modifier = Modifier.padding(top = 4.dp),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,20 +168,6 @@ internal fun NestFullScreen(
|
|||||||
// in the room. Hidden until the aggregator has at least one
|
// in the room. Hidden until the aggregator has at least one
|
||||||
// entry so the placeholder doesn't flash on entry.
|
// entry so the placeholder doesn't flash on entry.
|
||||||
val presences by viewModel.presences.collectAsState()
|
val presences by viewModel.presences.collectAsState()
|
||||||
val listenerCount = presences.size
|
|
||||||
if (listenerCount > 0) {
|
|
||||||
Text(
|
|
||||||
text =
|
|
||||||
androidx.compose.ui.res.pluralStringResource(
|
|
||||||
R.plurals.nest_listener_count,
|
|
||||||
listenerCount,
|
|
||||||
listenerCount,
|
|
||||||
),
|
|
||||||
style = MaterialTheme.typography.bodySmall,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
||||||
modifier = Modifier.padding(top = 4.dp),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val reactionsByPubkey by viewModel.recentReactions.collectAsState()
|
val reactionsByPubkey by viewModel.recentReactions.collectAsState()
|
||||||
var hostMenuTarget by rememberSaveable { mutableStateOf<String?>(null) }
|
var hostMenuTarget by rememberSaveable { mutableStateOf<String?>(null) }
|
||||||
@@ -198,7 +183,7 @@ internal fun NestFullScreen(
|
|||||||
// greys out at 50 % alpha, matching nostrnests' web client.
|
// greys out at 50 % alpha, matching nostrnests' web client.
|
||||||
val participantGrid =
|
val participantGrid =
|
||||||
androidx.compose.runtime.remember(event, presences) {
|
androidx.compose.runtime.remember(event, presences) {
|
||||||
com.vitorpamplona.amethyst.commons.viewmodels.buildParticipantGrid(
|
buildParticipantGrid(
|
||||||
participants = event.participants(),
|
participants = event.participants(),
|
||||||
presences = presences,
|
presences = presences,
|
||||||
)
|
)
|
||||||
@@ -324,11 +309,7 @@ internal fun NestFullScreen(
|
|||||||
event = event,
|
event = event,
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
accountViewModel = accountViewModel,
|
accountViewModel = accountViewModel,
|
||||||
modifier =
|
modifier = Modifier.weight(1f),
|
||||||
Modifier
|
|
||||||
.weight(1f, fill = true)
|
|
||||||
.padding(horizontal = 16.dp)
|
|
||||||
.padding(top = 12.dp, bottom = 16.dp),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -367,7 +348,7 @@ private fun NestTopAppBar(
|
|||||||
onShare: () -> Unit,
|
onShare: () -> Unit,
|
||||||
onEdit: () -> Unit,
|
onEdit: () -> Unit,
|
||||||
) {
|
) {
|
||||||
TopAppBar(
|
ShorterTopAppBar(
|
||||||
title = {
|
title = {
|
||||||
Text(
|
Text(
|
||||||
text = title,
|
text = title,
|
||||||
|
|||||||
+1
-10
@@ -296,10 +296,6 @@ fun JoinNestButton(
|
|||||||
if (serviceBase.isNullOrBlank() || endpoint.isNullOrBlank() || roomId.isBlank()) return
|
if (serviceBase.isNullOrBlank() || endpoint.isNullOrBlank() || roomId.isBlank()) return
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val addressValue = remember(event) { event.address().toValue() }
|
|
||||||
val hostPubkey = event.pubKey
|
|
||||||
val kind = event.kind
|
|
||||||
|
|
||||||
val colors =
|
val colors =
|
||||||
if (primaryColorOverride != null) {
|
if (primaryColorOverride != null) {
|
||||||
androidx.compose.material3.ButtonDefaults
|
androidx.compose.material3.ButtonDefaults
|
||||||
@@ -314,12 +310,7 @@ fun JoinNestButton(
|
|||||||
NestBridge.set(accountViewModel)
|
NestBridge.set(accountViewModel)
|
||||||
NestActivity.launch(
|
NestActivity.launch(
|
||||||
context = context,
|
context = context,
|
||||||
addressValue = addressValue,
|
addressValue = event.address().toValue(),
|
||||||
authBaseUrl = serviceBase,
|
|
||||||
endpoint = endpoint,
|
|
||||||
hostPubkey = hostPubkey,
|
|
||||||
roomId = roomId,
|
|
||||||
kind = kind,
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
colors = colors,
|
colors = colors,
|
||||||
|
|||||||
+7
-4
@@ -28,7 +28,6 @@ import androidx.compose.animation.core.rememberInfiniteTransition
|
|||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
@@ -60,10 +59,13 @@ import com.vitorpamplona.amethyst.commons.viewmodels.ParticipantGrid
|
|||||||
import com.vitorpamplona.amethyst.commons.viewmodels.RoomMember
|
import com.vitorpamplona.amethyst.commons.viewmodels.RoomMember
|
||||||
import com.vitorpamplona.amethyst.commons.viewmodels.RoomReaction
|
import com.vitorpamplona.amethyst.commons.viewmodels.RoomReaction
|
||||||
import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture
|
import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.UsernameDisplay
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size35dp
|
import com.vitorpamplona.amethyst.ui.theme.Size35dp
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size40dp
|
import com.vitorpamplona.amethyst.ui.theme.Size40dp
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.SpacedBy10dp
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.SpacedBy5dp
|
||||||
import kotlinx.collections.immutable.ImmutableSet
|
import kotlinx.collections.immutable.ImmutableSet
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -155,7 +157,7 @@ private fun ParticipantsSection(
|
|||||||
val absentAlphaModifier = remember { Modifier.alpha(0.5f) }
|
val absentAlphaModifier = remember { Modifier.alpha(0.5f) }
|
||||||
val speakingBorderModifier = remember(ringColor) { Modifier.border(2.dp, ringColor, CircleShape) }
|
val speakingBorderModifier = remember(ringColor) { Modifier.border(2.dp, ringColor, CircleShape) }
|
||||||
val spinnerModifier = remember(avatarSize) { Modifier.size(avatarSize - 8.dp) }
|
val spinnerModifier = remember(avatarSize) { Modifier.size(avatarSize - 8.dp) }
|
||||||
Column(modifier = Modifier.padding(top = 8.dp)) {
|
Column(modifier = Modifier.padding(top = 8.dp), verticalArrangement = SpacedBy5dp) {
|
||||||
Text(
|
Text(
|
||||||
text = title,
|
text = title,
|
||||||
style = MaterialTheme.typography.labelMedium,
|
style = MaterialTheme.typography.labelMedium,
|
||||||
@@ -168,7 +170,7 @@ private fun ParticipantsSection(
|
|||||||
LazyHorizontalGrid(
|
LazyHorizontalGrid(
|
||||||
rows = GridCells.Fixed(1),
|
rows = GridCells.Fixed(1),
|
||||||
modifier = gridModifier,
|
modifier = gridModifier,
|
||||||
horizontalArrangement = Arrangement.spacedBy(6.dp),
|
horizontalArrangement = SpacedBy5dp,
|
||||||
) {
|
) {
|
||||||
items(items = members, key = { it.pubkey }) { member ->
|
items(items = members, key = { it.pubkey }) { member ->
|
||||||
val isSpeaking = member.pubkey in speakingNow
|
val isSpeaking = member.pubkey in speakingNow
|
||||||
@@ -196,6 +198,7 @@ private fun ParticipantsSection(
|
|||||||
val isConnecting = member.pubkey in connectingSpeakers
|
val isConnecting = member.pubkey in connectingSpeakers
|
||||||
Column(
|
Column(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
verticalArrangement = SpacedBy10dp,
|
||||||
modifier = cellWidthModifier,
|
modifier = cellWidthModifier,
|
||||||
) {
|
) {
|
||||||
Box(contentAlignment = Alignment.Center) {
|
Box(contentAlignment = Alignment.Center) {
|
||||||
@@ -234,7 +237,7 @@ private fun ParticipantsSection(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
com.vitorpamplona.amethyst.ui.note.UsernameDisplay(
|
UsernameDisplay(
|
||||||
baseUser = user,
|
baseUser = user,
|
||||||
weight = Modifier.fillMaxWidth(),
|
weight = Modifier.fillMaxWidth(),
|
||||||
accountViewModel = accountViewModel,
|
accountViewModel = accountViewModel,
|
||||||
|
|||||||
Reference in New Issue
Block a user