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 359dbf691..13e992e90 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -173,6 +173,7 @@ import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CALL_WITHOUT_NOTIFI import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME; import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_PASSWORD; import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FROM_NOTIFICATION_START_CALL; +import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_BREAKOUT_ROOM; import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_MODERATOR; import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MODIFIED_BASE_URL; import static com.nextcloud.talk.utils.bundle.BundleKeys.KEY_PARTICIPANT_PERMISSION_CAN_PUBLISH_AUDIO; @@ -309,6 +310,7 @@ public class CallActivity extends CallBaseActivity { private CallParticipantList callParticipantList; private String switchToRoomToken = ""; + private boolean isBreakoutRoom = false; private SignalingMessageReceiver.LocalParticipantMessageListener localParticipantMessageListener = new SignalingMessageReceiver.LocalParticipantMessageListener() { @@ -390,6 +392,10 @@ public class CallActivity extends CallBaseActivity { isIncomingCallFromNotification = extras.getBoolean(KEY_FROM_NOTIFICATION_START_CALL); } + if (extras.containsKey(KEY_IS_BREAKOUT_ROOM)) { + isBreakoutRoom = extras.getBoolean(KEY_IS_BREAKOUT_ROOM); + } + credentials = ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()); baseUrl = extras.getString(KEY_MODIFIED_BASE_URL, ""); @@ -496,7 +502,7 @@ public class CallActivity extends CallBaseActivity { } private void initFeaturesVisibility() { - if (isAllowedToStartOrStopRecording()) { + if (isAllowedToStartOrStopRecording() || isAllowedToRaiseHand()) { binding.moreCallActions.setVisibility(View.VISIBLE); } else { binding.moreCallActions.setVisibility(View.GONE); @@ -1225,6 +1231,12 @@ public class CallActivity extends CallBaseActivity { } public void clickHand(Boolean raise) { + + if (isBreakoutRoom) { + Log.d(TAG, "send request to request help for breakout rooms."); + } +// + // TODO: fix how to build&send the message // if (isConnectionEstablished() && peerConnectionWrapperList != null) { // if (!hasMCU) { @@ -1911,7 +1923,6 @@ public class CallActivity extends CallBaseActivity { Bundle bundle = new Bundle(); bundle.putBoolean(KEY_SWITCH_TO_ROOM_AND_START_CALL, true); bundle.putString(KEY_ROOM_TOKEN, switchToRoomToken); - // bundle.putString(KEY_ROOM_ID, roomId); bundle.putParcelable(KEY_USER_ENTITY, conversationUser); // conversationName = extras.getString(KEY_CONVERSATION_NAME, ""); @@ -3062,7 +3073,8 @@ public class CallActivity extends CallBaseActivity { } public boolean isAllowedToRaiseHand() { - return CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "raise-hand"); + return CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "raise-hand") || + isBreakoutRoom; } private class SelfVideoTouchListener implements View.OnTouchListener { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index f553ce907..719084084 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -173,6 +173,7 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ACTIVE_CONVERSATION import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_PATHS import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID +import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_BREAKOUT_ROOM import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_MODERATOR import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_RECORDING_STATE import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID @@ -2841,6 +2842,10 @@ class ChatController(args: Bundle) : bundle.putBoolean(BundleKeys.KEY_CALL_WITHOUT_NOTIFICATION, true) } + if (it.objectType == BREAKOUT_ROOM_TYPE) { + bundle.putBoolean(KEY_IS_BREAKOUT_ROOM, true) + } + return if (activity != null) { val callIntent = Intent(activity, CallActivity::class.java) callIntent.putExtras(bundle) @@ -3531,5 +3536,6 @@ class ChatController(args: Bundle) : private const val LOOKING_INTO_FUTURE_TIMEOUT = 30 private const val CHUNK_SIZE: Int = 10 private const val ONE_SECOND_IN_MILLIS = 1000 + private const val BREAKOUT_ROOM_TYPE = "room" } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt b/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt index b0e6d55ee..e89647e3c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.kt @@ -81,4 +81,5 @@ object BundleKeys { const val KEY_PARTICIPANT_PERMISSION_CAN_PUBLISH_VIDEO = "KEY_PARTICIPANT_PERMISSION_CAN_PUBLISH_VIDEO" const val KEY_IS_MODERATOR = "KEY_IS_MODERATOR" const val KEY_SWITCH_TO_ROOM_AND_START_CALL = "KEY_SWITCH_TO_ROOM_AND_START_CALL" + const val KEY_IS_BREAKOUT_ROOM = "KEY_IS_BREAKOUT_ROOM" } 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 228e24e93..69ddb15e8 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java @@ -292,7 +292,7 @@ public class PeerConnectionWrapper { try { buffer = ByteBuffer.wrap(LoganSquare.serialize(dataChannelMessage).getBytes()); dataChannel.send(new DataChannel.Buffer(buffer, false)); - } catch (IOException e) { + } catch (Exception e) { Log.d(TAG, "Failed to send channel data, attempting regular " + dataChannelMessage); } }