mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-24 22:19:59 +01:00
parent
b9ff070884
commit
668b42e27e
@ -654,11 +654,11 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
microphoneControlButton?.setImageResource(R.drawable.ic_mic_off_white_24px)
|
microphoneControlButton?.setImageResource(R.drawable.ic_mic_off_white_24px)
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleMedia(audioOn, false)
|
toggleMedia(audioOn, false, false)
|
||||||
} else {
|
} else {
|
||||||
microphoneControlButton?.setImageResource(R.drawable.ic_mic_white_24px)
|
microphoneControlButton?.setImageResource(R.drawable.ic_mic_white_24px)
|
||||||
pulseAnimation!!.start()
|
pulseAnimation!!.start()
|
||||||
toggleMedia(true, false)
|
toggleMedia(true, false, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isVoiceOnlyCall && !isConnectionEstablished) {
|
if (isVoiceOnlyCall && !isConnectionEstablished) {
|
||||||
@ -709,7 +709,7 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
cameraSwitchButton!!.visibility = View.GONE
|
cameraSwitchButton!!.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleMedia(videoOn, true)
|
toggleMedia(videoOn, true, false)
|
||||||
} else if (activity != null && EffortlessPermissions.somePermissionPermanentlyDenied(
|
} else if (activity != null && EffortlessPermissions.somePermissionPermanentlyDenied(
|
||||||
activity!!,
|
activity!!,
|
||||||
*PERMISSIONS_CAMERA
|
*PERMISSIONS_CAMERA
|
||||||
@ -746,9 +746,11 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
|
|
||||||
private fun toggleMedia(
|
private fun toggleMedia(
|
||||||
enable: Boolean,
|
enable: Boolean,
|
||||||
video: Boolean
|
video: Boolean,
|
||||||
|
silencedByModerator: Boolean = false
|
||||||
) {
|
) {
|
||||||
var message: String
|
var message: String
|
||||||
|
val alreadySilenced = microphoneControlButton?.alpha == 0.7f
|
||||||
if (video) {
|
if (video) {
|
||||||
message = "videoOff"
|
message = "videoOff"
|
||||||
if (enable) {
|
if (enable) {
|
||||||
@ -789,6 +791,11 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!alreadySilenced && !enable && !video && silencedByModerator) {
|
||||||
|
microphoneControlButton?.setImageResource(R.drawable.ic_mic_off_white_24px)
|
||||||
|
Toast.makeText(context, R.string.silenced_by_moderator, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
|
||||||
sendDataChannelMessage(message)
|
sendDataChannelMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -976,21 +983,6 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
hasExternalSignalingServer = false
|
hasExternalSignalingServer = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conversationUser!!.userId != "?") {
|
|
||||||
/*try {
|
|
||||||
userUtils.createOrUpdateUser(
|
|
||||||
null, null, null, null, null, null, null,
|
|
||||||
conversationUser.id, null, null,
|
|
||||||
LoganSquare.serialize(externalSignalingServer!!)
|
|
||||||
)
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.subscribe()
|
|
||||||
} catch (exception: IOException) {
|
|
||||||
Log.e(TAG, "Failed to serialize external signaling server")
|
|
||||||
}*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (signalingSettingsOverall.ocs.signalingSettings.stunServers != null) {
|
if (signalingSettingsOverall.ocs.signalingSettings.stunServers != null) {
|
||||||
for (i in 0 until signalingSettingsOverall.ocs.signalingSettings.stunServers!!.size) {
|
for (i in 0 until signalingSettingsOverall.ocs.signalingSettings.stunServers!!.size) {
|
||||||
iceServer = signalingSettingsOverall.ocs.signalingSettings.stunServers!![i]
|
iceServer = signalingSettingsOverall.ocs.signalingSettings.stunServers!![i]
|
||||||
@ -1305,6 +1297,9 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
it, "video"
|
it, "video"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
"mutedByModerator" -> {
|
||||||
|
toggleMedia(enable = false, video = false, silencedByModerator = true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1399,6 +1394,16 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
magicPeerConnectionWrapper.addCandidate(iceCandidate)
|
magicPeerConnectionWrapper.addCandidate(iceCandidate)
|
||||||
}
|
}
|
||||||
"endOfCandidates" -> magicPeerConnectionWrapper.drainIceCandidates()
|
"endOfCandidates" -> magicPeerConnectionWrapper.drainIceCandidates()
|
||||||
|
"control" -> {
|
||||||
|
when (ncSignalingMessage.payload.action) {
|
||||||
|
"forceMute" -> {
|
||||||
|
if (ncSignalingMessage.payload.peerId == callSession) {
|
||||||
|
toggleMedia(false, video = false, silencedByModerator = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1799,7 +1804,7 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
(currentCallStatus == CallStatus.CALLING || isConnectionEstablished) && videoOn
|
(currentCallStatus == CallStatus.CALLING || isConnectionEstablished) && videoOn
|
||||||
&& enableVideo != localVideoTrack!!.enabled()
|
&& enableVideo != localVideoTrack!!.enabled()
|
||||||
) {
|
) {
|
||||||
toggleMedia(enableVideo, true)
|
toggleMedia(enableVideo, true, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (peerConnectionEvent.peerConnectionEventType == PeerConnectionEvent
|
} else if (peerConnectionEvent.peerConnectionEventType == PeerConnectionEvent
|
||||||
@ -2426,7 +2431,7 @@ class CallController(args: Bundle) : BaseController() {
|
|||||||
isPTTActive = false
|
isPTTActive = false
|
||||||
microphoneControlButton?.setImageResource(R.drawable.ic_mic_off_white_24px)
|
microphoneControlButton?.setImageResource(R.drawable.ic_mic_off_white_24px)
|
||||||
pulseAnimation!!.stop()
|
pulseAnimation!!.stop()
|
||||||
toggleMedia(false, false)
|
toggleMedia(false, false, false)
|
||||||
animateCallControls(false, 5000)
|
animateCallControls(false, 5000)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -45,4 +45,11 @@ public class NCMessagePayload {
|
|||||||
|
|
||||||
@JsonField(name = "name")
|
@JsonField(name = "name")
|
||||||
public String name;
|
public String name;
|
||||||
|
|
||||||
|
@JsonField(name = "action")
|
||||||
|
public String action;
|
||||||
|
|
||||||
|
@JsonField(name = "peerId")
|
||||||
|
public String peerId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.nextcloud.talk.models.json.websocket
|
||||||
|
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonField
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonObject
|
||||||
|
|
||||||
|
@JsonObject
|
||||||
|
class ControlDataWebSocketMessage {
|
||||||
|
@JsonField(name = ["action"])
|
||||||
|
var action: String? = null
|
||||||
|
|
||||||
|
@JsonField(name = ["peerId"])
|
||||||
|
var peerId: String? = null
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.nextcloud.talk.models.json.websocket
|
||||||
|
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonField
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonObject
|
||||||
|
|
||||||
|
@JsonObject
|
||||||
|
class ControlOverallWebSocketMessage : BaseWebSocketMessage() {
|
||||||
|
@JsonField(name = ["control"])
|
||||||
|
var controlWebSocketMessage: ControlWebSocketMessage? = null
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.nextcloud.talk.models.json.websocket
|
||||||
|
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonField
|
||||||
|
import com.bluelinelabs.logansquare.annotation.JsonObject
|
||||||
|
|
||||||
|
@JsonObject
|
||||||
|
class ControlWebSocketMessage {
|
||||||
|
@JsonField(name = ["recipient"])
|
||||||
|
var recipient: ActorWebSocketMessage? = null
|
||||||
|
|
||||||
|
@JsonField(name = ["data"])
|
||||||
|
var data: ControlDataWebSocketMessage? = null
|
||||||
|
|
||||||
|
}
|
@ -309,10 +309,18 @@ class MagicWebSocketInstance internal constructor(
|
|||||||
if (!TextUtils.isEmpty(ncSignalingMessage.from)) {
|
if (!TextUtils.isEmpty(ncSignalingMessage.from)) {
|
||||||
val messageHashMap =
|
val messageHashMap =
|
||||||
HashMap<String, String>()
|
HashMap<String, String>()
|
||||||
messageHashMap["jobId"] = Integer.toString(magicMap.add(ncSignalingMessage))
|
messageHashMap["jobId"] = magicMap.add(ncSignalingMessage).toString()
|
||||||
eventBus.post(WebSocketCommunicationEvent("signalingMessage", messageHashMap))
|
eventBus.post(WebSocketCommunicationEvent("signalingMessage", messageHashMap))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
"control" -> {
|
||||||
|
val controlOverallWebSocketMessage = LoganSquare.parse(text, ControlOverallWebSocketMessage::class.java)
|
||||||
|
if (controlOverallWebSocketMessage.controlWebSocketMessage?.data?.peerId == sessionId) {
|
||||||
|
if (controlOverallWebSocketMessage.controlWebSocketMessage?.data?.action?.equals("forceMute") == true) {
|
||||||
|
eventBus.post(WebSocketCommunicationEvent("mutedByModerator", hashMapOf()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
"bye" -> {
|
"bye" -> {
|
||||||
isConnected = false
|
isConnected = false
|
||||||
resumeId = ""
|
resumeId = ""
|
||||||
|
@ -344,5 +344,6 @@
|
|||||||
<string name="nc_search_for_more">Search for more participants</string>
|
<string name="nc_search_for_more">Search for more participants</string>
|
||||||
<string name="nc_new_group">New group</string>
|
<string name="nc_new_group">New group</string>
|
||||||
<string name="nc_search_empty_contacts">Where did they all hide?</string>
|
<string name="nc_search_empty_contacts">Where did they all hide?</string>
|
||||||
<string name="nc_reject_call">Reject </string>
|
<string name="nc_reject_call">Reject</string>
|
||||||
|
<string name="silenced_by_moderator">You were silenced by a moderator</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user