Browse Source

Migrate Call Activity and used classes/methods from requery to room

Resolves #2216

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 2 năm trước cách đây
mục cha
commit
fde2667fe7

+ 21 - 25
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<PeerConnection.IceServer> 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);
                         }
 

+ 14 - 4
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;
             }

+ 3 - 3
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<String> 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;

+ 24 - 11
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);