diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java index e34ed1d4a..ce7e18358 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java @@ -70,7 +70,8 @@ public class UserItem extends AbstractFlexibleItem 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 .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 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 diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java index 8859e8c40..db683cc2e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/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; diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java index 355bafbfb..1095ff051 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/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; } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java index e9d0aa44d..792a5ceab 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/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()); } } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java index 71a9db829..ffd74e34e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java +++ b/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; } 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 c6534dcbc..70756bc87 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java +++ b/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 userMap = (HashMap) 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 "";