From fde2667fe79a09e6b267a26bb61c06730d43d7d5 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 14 Jul 2022 18:19:43 +0200 Subject: [PATCH] Migrate Call Activity and used classes/methods from requery to room Resolves #2216 Signed-off-by: Andy Scherzinger --- .../talk/activities/CallActivity.java | 46 +++++++++---------- .../com/nextcloud/talk/utils/ApiUtils.java | 18 ++++++-- .../talk/webrtc/MagicWebSocketInstance.java | 6 +-- .../webrtc/WebSocketConnectionHelper.java | 35 +++++++++----- 4 files changed, 62 insertions(+), 43 deletions(-) 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 b1a7f548f..836e02879 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -58,6 +58,7 @@ import com.nextcloud.talk.adapters.ParticipantDisplayItem; import com.nextcloud.talk.adapters.ParticipantsAdapter; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.databinding.CallActivityBinding; import com.nextcloud.talk.events.ConfigurationChangeEvent; import com.nextcloud.talk.events.MediaStreamEvent; @@ -66,7 +67,6 @@ import com.nextcloud.talk.events.PeerConnectionEvent; import com.nextcloud.talk.events.SessionDescriptionSendEvent; import com.nextcloud.talk.events.WebSocketCommunicationEvent; import com.nextcloud.talk.models.ExternalSignalingServer; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.models.json.conversations.Conversation; import com.nextcloud.talk.models.json.conversations.RoomOverall; @@ -85,13 +85,12 @@ import com.nextcloud.talk.models.json.signaling.SignalingOverall; import com.nextcloud.talk.models.json.signaling.settings.IceServer; import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall; import com.nextcloud.talk.ui.dialog.AudioOutputDialog; +import com.nextcloud.talk.users.UserManager; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; -import com.nextcloud.talk.utils.LegacyUserEntityMapper; import com.nextcloud.talk.utils.NotificationUtils; import com.nextcloud.talk.utils.animations.PulseAnimation; import com.nextcloud.talk.utils.bundle.BundleKeys; -import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil; import com.nextcloud.talk.utils.power.PowerManagerUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; @@ -181,7 +180,7 @@ public class CallActivity extends CallBaseActivity { @Inject EventBus eventBus; @Inject - UserUtils userUtils; + UserManager userManager; @Inject AppPreferences appPreferences; @Inject @@ -228,7 +227,7 @@ public class CallActivity extends CallBaseActivity { private List iceServers; private CameraEnumerator cameraEnumerator; private String roomToken; - private UserEntity conversationUser; + private User conversationUser; private String conversationName; private String callSession; private MediaStream localStream; @@ -1209,30 +1208,28 @@ public class CallActivity extends CallBaseActivity { } Log.d(TAG, " hasExternalSignalingServer: " + hasExternalSignalingServer); - if (!conversationUser.getUserId().equals("?")) { + if (!"?".equals(conversationUser.getUserId())) { try { - userUtils.createOrUpdateUser(null, - null, - null, - null, - null, - null, - null, - conversationUser.getId(), - null, - null, - LoganSquare.serialize(externalSignalingServer)) + userManager.createOrUpdateUser( + null, + new UserManager.UserAttributes( + conversationUser.getId(), + null, + null, + null, + null, + null, + null, + null, + null, + LoganSquare.serialize(externalSignalingServer))) .subscribeOn(Schedulers.io()) .subscribe(); } catch (IOException exception) { Log.e(TAG, "Failed to serialize external signaling server", exception); } } else { - try { - conversationUser.setExternalSignalingServer(LoganSquare.serialize(externalSignalingServer)); - } catch (IOException exception) { - Log.e(TAG, "Failed to serialize external signaling server", exception); - } + conversationUser.setExternalSignalingServer(externalSignalingServer); } if (signalingSettingsOverall.getOcs().getSettings().getStunServers() != null) { @@ -1353,8 +1350,7 @@ public class CallActivity extends CallBaseActivity { ApplicationWideCurrentRoomHolder.getInstance().setSession(callSession); ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(roomId); ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomToken(roomToken); - ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom( - LegacyUserEntityMapper.toModel(conversationUser)); + ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom(conversationUser); callOrJoinRoomViaWebSocket(); } @@ -1417,7 +1413,7 @@ public class CallActivity extends CallBaseActivity { if (!TextUtils.isEmpty(roomToken)) { NotificationUtils.INSTANCE.cancelExistingNotificationsForRoom(getApplicationContext(), - Objects.requireNonNull(LegacyUserEntityMapper.toModel(conversationUser)), + conversationUser, roomToken); } diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index cddae0df2..5c999ed0e 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -121,7 +121,12 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/cloud/capabilities"; } + @Deprecated public static int getCallApiVersion(UserEntity capabilities, int[] versions) throws NoSupportedApiException { + return getCallApiVersion(LegacyUserEntityMapper.toModel(capabilities), versions); + } + + public static int getCallApiVersion(User capabilities, int[] versions) throws NoSupportedApiException { return getConversationApiVersion(capabilities, versions); } @@ -161,20 +166,25 @@ public class ApiUtils { return getConversationApiVersion(LegacyUserEntityMapper.toModel(user), versions); } + @Deprecated public static int getSignalingApiVersion(UserEntity user, int[] versions) throws NoSupportedApiException { + return getSignalingApiVersion(LegacyUserEntityMapper.toModel(user), versions); + } + + public static int getSignalingApiVersion(User user, int[] versions) throws NoSupportedApiException { for (int version : versions) { - if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v" + version)) { + if (CapabilitiesUtilNew.hasSpreedFeatureCapability(user, "signaling-v" + version)) { return version; } if (version == APIv2 && - CapabilitiesUtil.hasSpreedFeatureCapability(user, "sip-support") && - !CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v3")) { + CapabilitiesUtilNew.hasSpreedFeatureCapability(user, "sip-support") && + !CapabilitiesUtilNew.hasSpreedFeatureCapability(user, "signaling-v3")) { return version; } if (version == APIv1 && - !CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v3")) { + !CapabilitiesUtilNew.hasSpreedFeatureCapability(user, "signaling-v3")) { // Has no capability, we just assume it is always there when there is no v3 or later return version; } diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java index 78d534c8b..a97b638bc 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java @@ -27,9 +27,9 @@ import android.util.Log; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.events.NetworkEvent; import com.nextcloud.talk.events.WebSocketCommunicationEvent; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.models.json.signaling.NCMessageWrapper; import com.nextcloud.talk.models.json.signaling.NCSignalingMessage; @@ -90,7 +90,7 @@ public class MagicWebSocketInstance extends WebSocketListener { @Inject Context context; - private UserEntity conversationUser; + private User conversationUser; private String webSocketTicket; private String resumeId; private String sessionId; @@ -109,7 +109,7 @@ public class MagicWebSocketInstance extends WebSocketListener { private List messagesQueue = new ArrayList<>(); - MagicWebSocketInstance(UserEntity conversationUser, String connectionUrl, String webSocketTicket) { + MagicWebSocketInstance(User conversationUser, String connectionUrl, String webSocketTicket) { NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); this.connectionUrl = connectionUrl; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index 5e52df862..282493ae6 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -24,6 +24,7 @@ import android.annotation.SuppressLint; import android.util.Log; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.signaling.NCMessageWrapper; import com.nextcloud.talk.models.json.websocket.ActorWebSocketMessage; @@ -39,6 +40,7 @@ import com.nextcloud.talk.models.json.websocket.RoomOverallWebSocketMessage; import com.nextcloud.talk.models.json.websocket.RoomWebSocketMessage; import com.nextcloud.talk.models.json.websocket.SignalingDataWebSocketMessageForOffer; import com.nextcloud.talk.utils.ApiUtils; +import com.nextcloud.talk.utils.LegacyUserEntityMapper; import java.util.HashMap; import java.util.Map; @@ -70,7 +72,19 @@ public class WebSocketConnectionHelper { return null; } - public static synchronized MagicWebSocketInstance getExternalSignalingInstanceForServer(String url, UserEntity userEntity, String webSocketTicket, boolean isGuest) { + @Deprecated + public static synchronized MagicWebSocketInstance getExternalSignalingInstanceForServer(String url, + UserEntity userEntity, + String webSocketTicket, boolean isGuest) { + return getExternalSignalingInstanceForServer(url, + LegacyUserEntityMapper.toModel(userEntity), + webSocketTicket, + isGuest); + } + + public static synchronized MagicWebSocketInstance getExternalSignalingInstanceForServer(String url, + User user, + String webSocketTicket, boolean isGuest) { String generatedURL = url.replace("https://", "wss://").replace("http://", "ws://"); if (generatedURL.endsWith("/")) { @@ -79,18 +93,17 @@ public class WebSocketConnectionHelper { generatedURL += "/spreed"; } - long userId = isGuest ? -1 : userEntity.getId(); - + long userId = isGuest ? -1 : user.getId(); MagicWebSocketInstance magicWebSocketInstance; - if (userId != -1 && magicWebSocketInstanceMap.containsKey(userEntity.getId()) && (magicWebSocketInstance = magicWebSocketInstanceMap.get(userEntity.getId())) != null) { + if (userId != -1 && magicWebSocketInstanceMap.containsKey(user.getId()) && (magicWebSocketInstance = magicWebSocketInstanceMap.get(user.getId())) != null) { return magicWebSocketInstance; } else { if (userId == -1) { deleteExternalSignalingInstanceForUserEntity(userId); } - magicWebSocketInstance = new MagicWebSocketInstance(userEntity, generatedURL, webSocketTicket); - magicWebSocketInstanceMap.put(userEntity.getId(), magicWebSocketInstance); + magicWebSocketInstance = new MagicWebSocketInstance(user, generatedURL, webSocketTicket); + magicWebSocketInstanceMap.put(user.getId(), magicWebSocketInstance); return magicWebSocketInstance; } } @@ -105,19 +118,19 @@ public class WebSocketConnectionHelper { } } - HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { - int apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {ApiUtils.APIv3, 2, 1}); + HelloOverallWebSocketMessage getAssembledHelloModel(User user, String ticket) { + int apiVersion = ApiUtils.getSignalingApiVersion(user, new int[] {ApiUtils.APIv3, 2, 1}); HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); helloOverallWebSocketMessage.setType("hello"); HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage(); helloWebSocketMessage.setVersion("1.0"); AuthWebSocketMessage authWebSocketMessage = new AuthWebSocketMessage(); - authWebSocketMessage.setUrl(ApiUtils.getUrlForSignalingBackend(apiVersion, userEntity.getBaseUrl())); + authWebSocketMessage.setUrl(ApiUtils.getUrlForSignalingBackend(apiVersion, user.getBaseUrl())); AuthParametersWebSocketMessage authParametersWebSocketMessage = new AuthParametersWebSocketMessage(); authParametersWebSocketMessage.setTicket(ticket); - if (!userEntity.getUserId().equals("?")) { - authParametersWebSocketMessage.setUserid(userEntity.getUserId()); + if (!("?").equals(user.getUserId())) { + authParametersWebSocketMessage.setUserid(user.getUserId()); } authWebSocketMessage.setAuthParametersWebSocketMessage(authParametersWebSocketMessage); helloWebSocketMessage.setAuthWebSocketMessage(authWebSocketMessage);