@@ -27,7 +27,6 @@ import androidx.compose.material3.TextButton
2727import androidx.compose.runtime.Composable
2828import androidx.compose.runtime.LaunchedEffect
2929import androidx.compose.runtime.collectAsState
30- import androidx.compose.runtime.derivedStateOf
3130import androidx.compose.runtime.getValue
3231import androidx.compose.runtime.mutableStateOf
3332import androidx.compose.runtime.remember
@@ -54,6 +53,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies
5453import org.thoughtcrime.securesms.events.CallParticipant
5554import org.thoughtcrime.securesms.events.GroupCallRaiseHandEvent
5655import org.thoughtcrime.securesms.events.GroupCallSpeechEvent
56+ import org.thoughtcrime.securesms.recipients.Recipient
5757import java.util.concurrent.TimeUnit
5858import kotlin.math.max
5959import kotlin.time.Duration
@@ -69,9 +69,7 @@ object RaiseHandSnackbar {
6969
7070 @Composable
7171 fun View (webRtcCallViewModel : WebRtcCallViewModel , showCallInfoListener : () -> Unit , modifier : Modifier = Modifier ) {
72- var expansionState by remember { mutableStateOf(ExpansionState (shouldExpand = false , forced = false , collapseTimestamp = Duration .ZERO )) }
73-
74- val raisedHandsState by remember {
72+ val raisedHandsState: List <GroupCallRaiseHandEvent > by remember {
7573 webRtcCallViewModel.callParticipantsState
7674 .map { state ->
7775 val raisedHands = state.raisedHands.sortedBy {
@@ -90,12 +88,17 @@ object RaiseHandSnackbar {
9088 }
9189 }.collectAsState(initial = emptyList())
9290
93- val speechEvent by webRtcCallViewModel.groupCallSpeechEvents.collectAsStateWithLifecycle()
91+ val speechEvent: GroupCallSpeechEvent ? by webRtcCallViewModel.groupCallSpeechEvents.collectAsStateWithLifecycle()
9492
95- val state by remember {
96- derivedStateOf {
97- RaiseHandState (raisedHands = raisedHandsState, expansionState = expansionState, speechEvent = speechEvent)
98- }
93+ View (raisedHandsState, speechEvent, showCallInfoListener, modifier)
94+ }
95+
96+ @Composable
97+ fun View (raisedHandsState : List <GroupCallRaiseHandEvent >, speechEvent : GroupCallSpeechEvent ? , showCallInfoListener : () -> Unit , modifier : Modifier = Modifier ) {
98+ var expansionState by remember { mutableStateOf(ExpansionState (shouldExpand = false , forced = false , collapseTimestamp = Duration .ZERO )) }
99+
100+ val state = remember(raisedHandsState, speechEvent, expansionState) {
101+ RaiseHandState (raisedHands = raisedHandsState, expansionState = expansionState, speechEvent = speechEvent)
99102 }
100103
101104 LaunchedEffect (raisedHandsState, speechEvent) {
@@ -119,7 +122,7 @@ object RaiseHandSnackbar {
119122@Composable
120123private fun RaiseHandSnackbarPreview () {
121124 RaiseHand (
122- state = RaiseHandState (listOf (GroupCallRaiseHandEvent (CallParticipant . EMPTY , System .currentTimeMillis())))
125+ state = RaiseHandState (listOf (GroupCallRaiseHandEvent (CallParticipant (recipient = Recipient (isResolving = false , systemContactName = " Miles Morales " )) , System .currentTimeMillis())))
123126 )
124127}
125128
@@ -133,19 +136,20 @@ private fun RaiseHand(
133136 AnimatedVisibility (
134137 visible = state.raisedHands.isNotEmpty(),
135138 enter = fadeIn() + expandIn(expandFrom = Alignment .CenterEnd ),
136- exit = shrinkOut(shrinkTowards = Alignment .CenterEnd ) + fadeOut()
139+ exit = shrinkOut(shrinkTowards = Alignment .CenterEnd ) + fadeOut(),
140+ modifier = modifier
137141 ) {
138142 SignalTheme (
139143 isDarkMode = true
140144 ) {
141145 Surface (
142- modifier = modifier
146+ modifier = Modifier
143147 .padding(horizontal = 16 .dp)
144148 .clip(shape = RoundedCornerShape (16 .dp, 16 .dp, 16 .dp, 16 .dp))
145149 .background(SignalTheme .colors.colorSurface1)
146150 .animateContentSize()
147151 ) {
148- val boxModifier = modifier
152+ val boxModifier = Modifier
149153 .padding(horizontal = 16 .dp)
150154 .clickable(
151155 ! state.isExpanded,
0 commit comments