From 49571ca2290a1ba3e17543e0490deb7a28b926a5 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Wed, 1 Feb 2023 19:09:01 +0100 Subject: [PATCH] WIP. Send "raise hand" Building/sending of the signaling message is incomplete for now. Signed-off-by: Marcel Hibbe --- .../talk/activities/CallActivity.java | 24 ++++++++++++++ .../talk/ui/dialog/MoreCallActionsDialog.kt | 11 +++++++ .../talk/webrtc/PeerConnectionWrapper.java | 20 +++++++++++ .../res/drawable/ic_baseline_back_hand_24.xml | 5 +++ .../drawable/ic_baseline_do_not_touch_24.xml | 5 +++ .../res/layout/dialog_more_call_actions.xml | 33 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 100 insertions(+) create mode 100644 app/src/main/res/drawable/ic_baseline_back_hand_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_do_not_touch_24.xml diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index 4c16b8d80..ba18c50d8 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -210,6 +210,7 @@ public class CallActivity extends CallBaseActivity { public WebRtcAudioManager audioManager; public CallRecordingViewModel callRecordingViewModel; +// public RaiseHandViewModel raiseHandViewModel; private static final String[] PERMISSIONS_CALL = { Manifest.permission.CAMERA, @@ -1223,6 +1224,25 @@ public class CallActivity extends CallBaseActivity { } } + public void clickHand(Boolean raise) { + // TODO: fix how to build&send the message + + if (isConnectionEstablished() && peerConnectionWrapperList != null) { + if (!hasMCU) { + for (PeerConnectionWrapper peerConnectionWrapper : peerConnectionWrapperList) { + peerConnectionWrapper.raiseHand(raise); + } + } else { + for (PeerConnectionWrapper peerConnectionWrapper : peerConnectionWrapperList) { + if (peerConnectionWrapper.getSessionId().equals(webSocketClient.getSessionId())) { + peerConnectionWrapper.raiseHand(raise); + break; + } + } + } + } + } + private void animateCallControls(boolean show, long startDelay) { if (isVoiceOnlyCall) { @@ -3042,6 +3062,10 @@ public class CallActivity extends CallBaseActivity { && isModerator; } + public boolean isAllowedToRaiseHand() { + return CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "raise-hand"); + } + private class SelfVideoTouchListener implements View.OnTouchListener { @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt index 875cc3f4c..ae78c530b 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt @@ -72,12 +72,23 @@ class MoreCallActionsDialog(private val callActivity: CallActivity) : BottomShee } else { binding.recordCall.visibility = View.GONE } + + if (callActivity.isAllowedToRaiseHand) { + binding.raiseHand.visibility = View.VISIBLE + } else { + binding.raiseHand.visibility = View.GONE + } } private fun initClickListeners() { binding.recordCall.setOnClickListener { callActivity.callRecordingViewModel.clickRecordButton() } + + binding.raiseHand.setOnClickListener { + // TODO: save raised hand state & toggle... + callActivity.clickHand(true) + } } private fun initObservers() { diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java b/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java index 2676c5746..7a6793c97 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java @@ -190,6 +190,26 @@ public class PeerConnectionWrapper { } } + public void raiseHand(Boolean raise) { + + // TODO: fix how to build&send the message + + NCMessagePayload ncMessagePayload = new NCMessagePayload(); + ncMessagePayload.setState(raise); + ncMessagePayload.setTimestamp(System.currentTimeMillis()); + + + NCSignalingMessage ncSignalingMessage = new NCSignalingMessage(); +// ncSignalingMessage.setFrom(); + ncSignalingMessage.setTo(sessionId); +// ncSignalingMessage.setSid(); + ncSignalingMessage.setType("raiseHand"); + ncSignalingMessage.setPayload(ncMessagePayload); + ncSignalingMessage.setRoomType(videoStreamType); + + signalingMessageSender.send(ncSignalingMessage); + } + /** * Adds a listener for data channel messages. * diff --git a/app/src/main/res/drawable/ic_baseline_back_hand_24.xml b/app/src/main/res/drawable/ic_baseline_back_hand_24.xml new file mode 100644 index 000000000..0e05b786e --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_back_hand_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_do_not_touch_24.xml b/app/src/main/res/drawable/ic_baseline_do_not_touch_24.xml new file mode 100644 index 000000000..6f844e82d --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_do_not_touch_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/dialog_more_call_actions.xml b/app/src/main/res/layout/dialog_more_call_actions.xml index a44fdf80a..3ca078e46 100644 --- a/app/src/main/res/layout/dialog_more_call_actions.xml +++ b/app/src/main/res/layout/dialog_more_call_actions.xml @@ -37,6 +37,39 @@ android:textColor="@color/medium_emphasis_text_dark_background" android:textSize="@dimen/bottom_sheet_text_size" /> + + + + + + + + Answer as video call Switch to self video %1$s raised the hand + Raise hand + Lower hand Mute microphone