Browse Source

Merge pull request #1229 from nextcloud/feature/apiv4/calls

[apiv4] ☎️ Calls
Joas Schilling 4 years ago
parent
commit
90ad596f90

+ 4 - 3
app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java

@@ -70,7 +70,8 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
     public boolean equals(Object o) {
         if (o instanceof UserItem) {
             UserItem inItem = (UserItem) o;
-            return participant.getUserId().equals(inItem.getModel().getUserId());
+            return participant.getActorType() == inItem.getModel().getActorType() &&
+                    participant.getActorId().equals(inItem.getModel().getActorId());
         }
         return false;
     }
@@ -177,7 +178,7 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
                     .setOldController(holder.simpleDraweeView.getController())
                     .setAutoPlayAnimations(true)
                     .setImageRequest(DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(userEntity.getBaseUrl(),
-                                                                                                         participant.getUserId(), R.dimen.avatar_size), null))
+                                                                                                         participant.getActorId(), R.dimen.avatar_size), null))
                     .build();
             holder.simpleDraweeView.setController(draweeController);
         }
@@ -278,7 +279,7 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
     public boolean filter(String constraint) {
         return participant.getDisplayName() != null &&
                 (Pattern.compile(constraint, Pattern.CASE_INSENSITIVE | Pattern.LITERAL).matcher(participant.getDisplayName().trim()).find() ||
-                        Pattern.compile(constraint, Pattern.CASE_INSENSITIVE | Pattern.LITERAL).matcher(participant.getUserId().trim()).find());
+                        Pattern.compile(constraint, Pattern.CASE_INSENSITIVE | Pattern.LITERAL).matcher(participant.getActorId().trim()).find());
     }
 
     @Override

+ 15 - 9
app/src/main/java/com/nextcloud/talk/controllers/CallController.java

@@ -1273,7 +1273,7 @@ public class CallController extends BaseController {
             inCallFlag = (int) Participant.ParticipantFlags.IN_CALL_WITH_AUDIO_AND_VIDEO.getValue();
         }
 
-        int apiVersion = ApiUtils.getCallApiVersion(conversationUser, new int[] {1});
+        int apiVersion = ApiUtils.getCallApiVersion(conversationUser, new int[] {ApiUtils.APIv4, 1});
 
         ncApi.joinCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken), inCallFlag)
                 .subscribeOn(Schedulers.io())
@@ -1558,7 +1558,7 @@ public class CallController extends BaseController {
     }
 
     private void hangupNetworkCalls(boolean shutDownView) {
-        int apiVersion = ApiUtils.getCallApiVersion(conversationUser, new int[] {1});
+        int apiVersion = ApiUtils.getCallApiVersion(conversationUser, new int[] {ApiUtils.APIv4, 1});
 
         ncApi.leaveCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken))
                 .subscribeOn(Schedulers.io())
@@ -1686,7 +1686,7 @@ public class CallController extends BaseController {
 
     private void getPeersForCall() {
         Log.d(TAG, "getPeersForCall");
-        int apiVersion = ApiUtils.getCallApiVersion(conversationUser, new int[] {1});
+        int apiVersion = ApiUtils.getCallApiVersion(conversationUser, new int[] {ApiUtils.APIv4, 1});
 
         ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken))
                 .subscribeOn(Schedulers.io())
@@ -1866,15 +1866,21 @@ public class CallController extends BaseController {
                 }
             }
         } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType.NICK_CHANGE)) {
-            participantDisplayItems.get(sessionId).setNick(peerConnectionEvent.getNick());
+            if (participantDisplayItems.get(sessionId) != null) {
+                participantDisplayItems.get(sessionId).setNick(peerConnectionEvent.getNick());
+            }
             participantsAdapter.notifyDataSetChanged();
 
         } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType.VIDEO_CHANGE) && !isVoiceOnlyCall) {
-            participantDisplayItems.get(sessionId).setStreamEnabled(peerConnectionEvent.getChangeValue());
+            if (participantDisplayItems.get(sessionId) != null) {
+                participantDisplayItems.get(sessionId).setStreamEnabled(peerConnectionEvent.getChangeValue());
+            }
             participantsAdapter.notifyDataSetChanged();
 
         } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType.AUDIO_CHANGE)) {
-            participantDisplayItems.get(sessionId).setAudioEnabled(peerConnectionEvent.getChangeValue());
+            if (participantDisplayItems.get(sessionId) != null) {
+                participantDisplayItems.get(sessionId).setAudioEnabled(peerConnectionEvent.getChangeValue());
+            }
             participantsAdapter.notifyDataSetChanged();
 
         } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType.PUBLISHER_FAILED)) {
@@ -2044,11 +2050,11 @@ public class CallController extends BaseController {
             nick = getPeerConnectionWrapperForSessionIdAndType(session, videoStreamType, false).getNick();
         }
 
-        String userId;
+        String userId = "";
         if (hasMCU) {
             userId = webSocketClient.getUserIdForSession(session);
-        } else {
-            userId = participantMap.get(session).getUserId();
+        } else if (participantMap.get(session).getActorType() == Participant.ActorType.USERS) {
+            userId = participantMap.get(session).getActorId();
         }
 
         String urlForAvatar;

+ 3 - 2
app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java

@@ -209,7 +209,7 @@ public class CallNotificationController extends BaseController {
     }
 
     private void checkIfAnyParticipantsRemainInRoom() {
-        int apiVersion = ApiUtils.getCallApiVersion(userBeingCalled, new int[] {1});
+        int apiVersion = ApiUtils.getCallApiVersion(userBeingCalled, new int[] {ApiUtils.APIv4, 1});
 
         ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(apiVersion, userBeingCalled.getBaseUrl(),
                                                                   currentConversation.getToken()))
@@ -230,7 +230,8 @@ public class CallNotificationController extends BaseController {
 
                         if (hasParticipantsInCall) {
                             for (Participant participant : participantList) {
-                                if (participant.getUserId().equals(userBeingCalled.getUserId())) {
+                                if (participant.getActorType() == Participant.ActorType.USERS &&
+                                        participant.getActorId().equals(userBeingCalled.getUserId())) {
                                     inCallOnDifferentDevice = true;
                                     break;
                                 }

+ 12 - 10
app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java

@@ -848,7 +848,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                 RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion,
                                                                                         currentUser.getBaseUrl(),
                                                                                         roomType,
-                                                                                        userItem.getModel().getUserId(),
+                                                                                        userItem.getModel().getActorId(),
                                                                                         null);
 
                 ncApi.createRoom(credentials,
@@ -895,15 +895,15 @@ public class ContactsController extends BaseController implements SearchView.OnQ
 
                 if ("groups".equals(participant.getSource())) {
                     if (participant.isSelected()) {
-                        selectedGroupIds.add(participant.getUserId());
+                        selectedGroupIds.add(participant.getActorId());
                     } else {
-                        selectedGroupIds.remove(participant.getUserId());
+                        selectedGroupIds.remove(participant.getActorId());
                     }
                 } else {
                     if (participant.isSelected()) {
-                        selectedUserIds.add(participant.getUserId());
+                        selectedUserIds.add(participant.getActorId());
                     } else {
-                        selectedUserIds.remove(participant.getUserId());
+                        selectedUserIds.remove(participant.getActorId());
                     }
                 }
 
@@ -916,10 +916,11 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                     Participant internalParticipant;
                     for (int i = 0; i < currentItems.size(); i++) {
                         internalParticipant = currentItems.get(i).getModel();
-                        if (internalParticipant.getUserId().equals(participant.getUserId()) &&
-                                "groups".equals(internalParticipant.getSource()) && internalParticipant.isSelected()) {
+                        if (internalParticipant.getActorId().equals(participant.getActorId()) &&
+                                internalParticipant.getActorType() == Participant.ActorType.GROUPS &&
+                                internalParticipant.isSelected()) {
                             internalParticipant.setSelected(false);
-                            selectedGroupIds.remove(internalParticipant.getUserId());
+                            selectedGroupIds.remove(internalParticipant.getActorId());
                         }
                     }
 
@@ -959,9 +960,10 @@ public class ContactsController extends BaseController implements SearchView.OnQ
             for (int i = 0; i < currentItems.size(); i++) {
                 if (currentItems.get(i) instanceof UserItem) {
                     internalParticipant = ((UserItem) currentItems.get(i)).getModel();
-                    if ("groups".equals(internalParticipant.getSource()) && internalParticipant.isSelected()) {
+                    if (internalParticipant.getActorType() == Participant.ActorType.GROUPS &&
+                            internalParticipant.isSelected()) {
                         internalParticipant.setSelected(false);
-                        selectedGroupIds.remove(internalParticipant.getUserId());
+                        selectedGroupIds.remove(internalParticipant.getActorId());
                     }
                 }
             }

+ 0 - 33
app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java

@@ -125,23 +125,10 @@ public class Participant {
         return attendeePin;
     }
 
-    @Deprecated
-    public String getUserId() {
-        if (this.actorType != null && this.actorType == ActorType.USERS) {
-            return this.actorId;
-        }
-        return this.userId;
-    }
-
     public ParticipantType getType() {
         return this.type;
     }
 
-    @Deprecated
-    public String getName() {
-        return this.name;
-    }
-
     public String getDisplayName() {
         return this.displayName;
     }
@@ -159,11 +146,6 @@ public class Participant {
         return sessionIds;
     }
 
-    @Deprecated
-    public long getRoomId() {
-        return this.roomId;
-    }
-
     public Object getInCall() {
         return this.inCall;
     }
@@ -176,11 +158,6 @@ public class Participant {
         return this.selected;
     }
 
-    @Deprecated
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
     public void setAttendeeId(Long attendeeId) {
         this.attendeeId = attendeeId;
     }
@@ -201,11 +178,6 @@ public class Participant {
         this.type = type;
     }
 
-    @Deprecated
-    public void setName(String name) {
-        this.name = name;
-    }
-
     public void setDisplayName(String displayName) {
         this.displayName = displayName;
     }
@@ -219,11 +191,6 @@ public class Participant {
         this.sessionId = sessionId;
     }
 
-    @Deprecated
-    public void setRoomId(long roomId) {
-        this.roomId = roomId;
-    }
-
     public void setInCall(Object inCall) {
         this.inCall = inCall;
     }

+ 21 - 5
app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java

@@ -64,6 +64,9 @@ import okhttp3.WebSocket;
 import okhttp3.WebSocketListener;
 import okio.ByteString;
 
+import static com.nextcloud.talk.models.json.participants.Participant.ActorType.GUESTS;
+import static com.nextcloud.talk.models.json.participants.Participant.ActorType.USERS;
+
 @AutoInjector(NextcloudTalkApplication.class)
 public class MagicWebSocketInstance extends WebSocketListener {
     private static final String TAG = "MagicWebSocketInstance";
@@ -246,7 +249,14 @@ public class MagicWebSocketInstance extends WebSocketListener {
                                             internalHashMap = joinEventMap.get(i);
                                             HashMap<String, Object> userMap = (HashMap<String, Object>) internalHashMap.get("user");
                                             participant = new Participant();
-                                            participant.setUserId((String) internalHashMap.get("userid"));
+                                            String userId = (String) internalHashMap.get("userid");
+                                            if (userId != null) {
+                                                participant.setActorType(USERS);
+                                                participant.setActorId(userId);
+                                            } else {
+                                                participant.setActorType(GUESTS);
+                                                // FIXME seems to be not given by the HPB: participant.setActorId();
+                                            }
                                             if (userMap != null) {
                                                 // There is no "user" attribute for guest participants.
                                                 participant.setDisplayName((String) userMap.get("displayname"));
@@ -399,16 +409,22 @@ public class MagicWebSocketInstance extends WebSocketListener {
     }
 
     public String getDisplayNameForSession(String session) {
-        if (usersHashMap.containsKey(session)) {
-            return usersHashMap.get(session).getDisplayName();
+        Participant participant = usersHashMap.get(session);
+        if (participant != null) {
+            if (participant.getDisplayName() != null) {
+                return participant.getDisplayName();
+            }
         }
 
         return NextcloudTalkApplication.Companion.getSharedApplication().getString(R.string.nc_nick_guest);
     }
 
     public String getUserIdForSession(String session) {
-        if (usersHashMap.containsKey(session)) {
-            return usersHashMap.get(session).getUserId();
+        Participant participant = usersHashMap.get(session);
+        if (participant != null) {
+            if (participant.getActorType() == USERS) {
+                return participant.getActorId();
+            }
         }
 
         return "";