Add confirmation dialog for lowering a raised hand.

This commit is contained in:
Nicholas Tinsley
2023-12-11 17:37:19 -05:00
committed by Cody Henthorne
parent c2f5a6390e
commit 9ed80d46b6
17 changed files with 136 additions and 65 deletions

View File

@@ -16,7 +16,7 @@ data class CallParticipant constructor(
val isForwardingVideo: Boolean = true,
val isVideoEnabled: Boolean = false,
val isMicrophoneEnabled: Boolean = false,
val isHandRaised: Boolean = false,
val handRaisedTimestamp: Long = HAND_LOWERED,
val lastSpoke: Long = 0,
val audioLevel: AudioLevel? = null,
val isMediaKeysReceived: Boolean = true,
@@ -36,6 +36,9 @@ data class CallParticipant constructor(
val isSelf: Boolean
get() = recipient.isSelf
val isHandRaised: Boolean
get() = handRaisedTimestamp > 0
fun getRecipientDisplayName(context: Context): String {
return if (recipient.isSelf && isPrimary) {
context.getString(R.string.CallParticipant__you)
@@ -72,6 +75,10 @@ data class CallParticipant constructor(
return copy(isScreenSharing = enable)
}
fun withHandRaisedTimestamp(timestamp: Long): CallParticipant {
return copy(handRaisedTimestamp = timestamp)
}
enum class DeviceOrdinal {
PRIMARY, SECONDARY
}
@@ -103,24 +110,28 @@ data class CallParticipant constructor(
}
companion object {
const val HAND_LOWERED = -1L
@JvmField
val EMPTY: CallParticipant = CallParticipant()
@JvmStatic
@JvmOverloads
fun createLocal(
cameraState: CameraState,
renderer: BroadcastVideoSink,
microphoneEnabled: Boolean,
isHandRaised: Boolean
handRaisedTimestamp: Long,
callParticipantId: CallParticipantId = CallParticipantId(Recipient.self())
): CallParticipant {
return CallParticipant(
callParticipantId = CallParticipantId(Recipient.self()),
callParticipantId = callParticipantId,
recipient = Recipient.self(),
videoSink = renderer,
cameraState = cameraState,
isVideoEnabled = cameraState.isEnabled && cameraState.cameraCount > 0,
isMicrophoneEnabled = microphoneEnabled,
isHandRaised = isHandRaised
handRaisedTimestamp = handRaisedTimestamp
)
}
@@ -133,7 +144,7 @@ data class CallParticipant constructor(
isForwardingVideo: Boolean,
audioEnabled: Boolean,
videoEnabled: Boolean,
isHandRaised: Boolean,
handRaisedTimestamp: Long,
lastSpoke: Long,
mediaKeysReceived: Boolean,
addedToCallTime: Long,
@@ -148,7 +159,7 @@ data class CallParticipant constructor(
isForwardingVideo = isForwardingVideo,
isVideoEnabled = videoEnabled,
isMicrophoneEnabled = audioEnabled,
isHandRaised = isHandRaised,
handRaisedTimestamp = handRaisedTimestamp,
lastSpoke = lastSpoke,
isMediaKeysReceived = mediaKeysReceived,
addedToCallTime = addedToCallTime,

View File

@@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.events
import com.annimon.stream.OptionalLong
import org.thoughtcrime.securesms.components.webrtc.BroadcastVideoSink
import org.thoughtcrime.securesms.events.CallParticipant.Companion.HAND_LOWERED
import org.thoughtcrime.securesms.events.CallParticipant.Companion.createLocal
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
@@ -92,7 +93,6 @@ class WebRtcViewModel(state: WebRtcServiceState) {
val isRemoteVideoOffer: Boolean = state.getCallSetupState(state.callInfoState.activePeer?.callId).isRemoteVideoOffer
val callConnectedTime: Long = state.callInfoState.callConnectedTime
val remoteParticipants: List<CallParticipant> = state.callInfoState.remoteCallParticipants
val raisedHands: List<GroupCallRaiseHandEvent> = state.callInfoState.raisedHands
val identityChangedParticipants: Set<RecipientId> = state.callInfoState.identityChangedRecipients
val remoteDevicesCount: OptionalLong = state.callInfoState.remoteDevicesCount
val participantLimit: Long? = state.callInfoState.participantLimit
@@ -107,11 +107,11 @@ class WebRtcViewModel(state: WebRtcServiceState) {
val availableDevices: Set<SignalAudioManager.AudioDevice> = state.localDeviceState.availableDevices
val bluetoothPermissionDenied: Boolean = state.localDeviceState.bluetoothPermissionDenied
val localParticipant: CallParticipant = createLocal(
val localParticipant: CallParticipant = state.callInfoState.localParticipant ?: createLocal(
state.localDeviceState.cameraState,
(if (state.videoState.localSink != null) state.videoState.localSink else BroadcastVideoSink())!!,
state.localDeviceState.isMicrophoneEnabled,
state.callInfoState.raisedHands.map { it.sender }.contains(Recipient.self())
HAND_LOWERED
)
val isCellularConnection: Boolean = when (state.localDeviceState.networkConnectionType) {