Fix nickname & fonts

This commit is contained in:
Mario Danic 2018-10-26 15:53:22 +02:00
parent a007af3db6
commit 98cabbfc11
20 changed files with 84 additions and 15 deletions

View File

@ -132,6 +132,7 @@ import butterknife.OnClick;
import butterknife.OnLongClick; import butterknife.OnLongClick;
import eu.davidea.flipview.FlipView; import eu.davidea.flipview.FlipView;
import io.reactivex.Observer; import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@ -247,6 +248,7 @@ public class CallController extends BaseController {
private MagicWebSocketInstance webSocketClient; private MagicWebSocketInstance webSocketClient;
private WebSocketConnectionHelper webSocketConnectionHelper; private WebSocketConnectionHelper webSocketConnectionHelper;
private boolean hasMCU; private boolean hasMCU;
private boolean hasExternalSignalingServer;
public CallController(Bundle args) { public CallController(Bundle args) {
super(args); super(args);
@ -921,11 +923,27 @@ public class CallController extends BaseController {
if (signalingSettingsOverall != null && signalingSettingsOverall.getOcs() != null && if (signalingSettingsOverall != null && signalingSettingsOverall.getOcs() != null &&
signalingSettingsOverall.getOcs().getSettings() != null) { signalingSettingsOverall.getOcs().getSettings() != null) {
externalSignalingServer = new ExternalSignalingServer();
if (!TextUtils.isEmpty(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingServer()) && if (!TextUtils.isEmpty(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingServer()) &&
!TextUtils.isEmpty(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingTicket())) { !TextUtils.isEmpty(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingTicket())) {
externalSignalingServer = new ExternalSignalingServer(); externalSignalingServer = new ExternalSignalingServer();
externalSignalingServer.setExternalSignalingServer(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingServer()); externalSignalingServer.setExternalSignalingServer(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingServer());
externalSignalingServer.setExternalSignalingTicket(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingTicket()); externalSignalingServer.setExternalSignalingTicket(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingTicket());
hasExternalSignalingServer = true;
} else {
hasExternalSignalingServer = false;
}
if (!conversationUser.getUserId().equals("?")) {
try {
userUtils.createOrUpdateUser(null, null, null, null, null, null, null,
conversationUser.getId(), null, null, LoganSquare.serialize(externalSignalingServer))
.subscribeOn(Schedulers.newThread())
.subscribe();
} catch (IOException exception) {
Log.e(TAG, "Failed to serialize external signaling server");
}
} }
if (signalingSettingsOverall.getOcs().getSettings().getStunServers() != null) { if (signalingSettingsOverall.getOcs().getSettings().getStunServers() != null) {
@ -1004,7 +1022,7 @@ public class CallController extends BaseController {
.getCapabilities().getSpreedCapability() .getCapabilities().getSpreedCapability()
.getFeatures().contains("no-ping")); .getFeatures().contains("no-ping"));
if (externalSignalingServer == null) { if (!hasExternalSignalingServer) {
joinRoomAndCall(); joinRoomAndCall();
} else { } else {
setupAndInitiateWebSocketsConnection(); setupAndInitiateWebSocketsConnection();
@ -1057,7 +1075,7 @@ public class CallController extends BaseController {
} }
private void callOrJoinRoomViaWebSocket() { private void callOrJoinRoomViaWebSocket() {
if (externalSignalingServer == null) { if (!hasExternalSignalingServer) {
performCall(); performCall();
} else { } else {
webSocketClient.joinRoomWithRoomTokenAndSession(roomToken, callSession); webSocketClient.joinRoomWithRoomTokenAndSession(roomToken, callSession);
@ -1132,7 +1150,7 @@ public class CallController extends BaseController {
NotificationUtils.cancelExistingNotifications(getApplicationContext(), conversationUser); NotificationUtils.cancelExistingNotifications(getApplicationContext(), conversationUser);
if (externalSignalingServer == null) { if (!hasExternalSignalingServer) {
ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(baseUrl, urlToken)) ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(baseUrl, urlToken))
.subscribeOn(Schedulers.newThread()) .subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -1379,7 +1397,7 @@ public class CallController extends BaseController {
@Override @Override
public void onNext(GenericOverall genericOverall) { public void onNext(GenericOverall genericOverall) {
if (externalSignalingServer != null) { if (hasExternalSignalingServer) {
webSocketClient.joinRoomWithRoomTokenAndSession("", ""); webSocketClient.joinRoomWithRoomTokenAndSession("", "");
} }
@ -1480,7 +1498,7 @@ public class CallController extends BaseController {
} }
for (String sessionId : newSessions) { for (String sessionId : newSessions) {
if (externalSignalingServer != null && webSocketClient.hasMCU()) { if (hasExternalSignalingServer && webSocketClient.hasMCU()) {
if (!sessionId.equals(webSocketClient.getSessionId())) { if (!sessionId.equals(webSocketClient.getSessionId())) {
alwaysGetPeerConnectionWrapperForSessionId(sessionId, false); alwaysGetPeerConnectionWrapperForSessionId(sessionId, false);
@ -1619,7 +1637,7 @@ public class CallController extends BaseController {
} }
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
.PeerConnectionEventType.NICK_CHANGE)) { .PeerConnectionEventType.NICK_CHANGE)) {
gotNick(peerConnectionEvent.getSessionId(), peerConnectionEvent.getNick()); gotNick(peerConnectionEvent.getSessionId(), peerConnectionEvent.getNick(), true);
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
.PeerConnectionEventType.VIDEO_CHANGE) && !isVoiceOnlyCall) { .PeerConnectionEventType.VIDEO_CHANGE) && !isVoiceOnlyCall) {
gotAudioOrVideoChange(true, peerConnectionEvent.getSessionId(), gotAudioOrVideoChange(true, peerConnectionEvent.getSessionId(),
@ -1667,7 +1685,7 @@ public class CallController extends BaseController {
ncMessageWrapper.setSignalingMessage(ncSignalingMessage); ncMessageWrapper.setSignalingMessage(ncSignalingMessage);
if (externalSignalingServer == null) { if (!hasExternalSignalingServer) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("{") stringBuilder.append("{")
.append("\"fn\":\"") .append("\"fn\":\"")
@ -1836,7 +1854,12 @@ public class CallController extends BaseController {
surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT); surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
surfaceViewRenderer.setOnClickListener(videoOnClickListener); surfaceViewRenderer.setOnClickListener(videoOnClickListener);
remoteRenderersLayout.addView(relativeLayout); remoteRenderersLayout.addView(relativeLayout);
gotNick(session, getPeerConnectionWrapperForSessionId(session).getNick()); if (hasExternalSignalingServer) {
gotNick(session, webSocketClient.getDisplayNameForSession(session), false);
} else {
gotNick(session, getPeerConnectionWrapperForSessionId(session).getNick(), false);
}
setupAvatarForSession(session); setupAvatarForSession(session);
callControls.setZ(100.0f); callControls.setZ(100.0f);
@ -1844,11 +1867,18 @@ public class CallController extends BaseController {
} }
} }
private void gotNick(String sessionId, String nick) { private void gotNick(String sessionOrUserId, String nick, boolean isFromAnEvent) {
RelativeLayout relativeLayout = remoteRenderersLayout.findViewWithTag(sessionId); if (isFromAnEvent && hasExternalSignalingServer) {
// get session based on userId
sessionOrUserId = webSocketClient.getSessionForUserId(sessionOrUserId);
}
if (relativeLayout != null) { if (relativeLayout != null) {
RelativeLayout relativeLayout = remoteRenderersLayout.findViewWithTag(sessionOrUserId);
TextView textView = relativeLayout.findViewById(R.id.peer_nick_text_view); TextView textView = relativeLayout.findViewById(R.id.peer_nick_text_view);
textView.setText(nick); if (!textView.getText().equals(nick)) {
textView.setText(nick);
}
} }
} }

View File

@ -32,7 +32,7 @@ public class DataChannelMessage {
String type; String type;
@JsonField(name = "payload") @JsonField(name = "payload")
String payload; Object payload;
public DataChannelMessage(String type) { public DataChannelMessage(String type) {
this.type = type; this.type = type;

View File

@ -233,10 +233,21 @@ public class MagicPeerConnectionWrapper {
try { try {
DataChannelMessage dataChannelMessage = LoganSquare.parse(strData, DataChannelMessage.class); DataChannelMessage dataChannelMessage = LoganSquare.parse(strData, DataChannelMessage.class);
String internalNick;
if ("nickChanged".equals(dataChannelMessage.getType())) { if ("nickChanged".equals(dataChannelMessage.getType())) {
nick = dataChannelMessage.getPayload(); if (dataChannelMessage.getPayload() instanceof String) {
EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType internalNick = (String) dataChannelMessage.getPayload();
.NICK_CHANGE, sessionId, nick, null)); if (!internalNick.equals(nick)) {
setNick(nick);
EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
.NICK_CHANGE, sessionId, getNick(), null));
}
} else {
HashMap<String, String> payloadHashMap = (HashMap<String, String>) dataChannelMessage.getPayload();
EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
.NICK_CHANGE, payloadHashMap.get("userid"), payloadHashMap.get("name"), null));
}
} else if ("audioOn".equals(dataChannelMessage.getType())) { } else if ("audioOn".equals(dataChannelMessage.getType())) {
remoteAudioOn = true; remoteAudioOn = true;
EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType

View File

@ -37,10 +37,13 @@ import com.nextcloud.talk.models.json.websocket.HelloResponseOverallWebSocketMes
import com.nextcloud.talk.models.json.websocket.JoinedRoomOverallWebSocketMessage; import com.nextcloud.talk.models.json.websocket.JoinedRoomOverallWebSocketMessage;
import com.nextcloud.talk.utils.MagicMap; import com.nextcloud.talk.utils.MagicMap;
import com.nextcloud.talk.R;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
@ -78,6 +81,9 @@ public class MagicWebSocketInstance extends WebSocketListener {
private boolean isPermanentlyClosed = false; private boolean isPermanentlyClosed = false;
private int restartCount = 0; private int restartCount = 0;
private HashMap<String, String> displayNameHashMap;
private HashMap<String, String> userIdSesssionHashMap;
MagicWebSocketInstance(UserEntity conversationUser, String connectionUrl, String webSocketTicket) { MagicWebSocketInstance(UserEntity conversationUser, String connectionUrl, String webSocketTicket) {
NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
@ -85,6 +91,7 @@ public class MagicWebSocketInstance extends WebSocketListener {
this.conversationUser = conversationUser; this.conversationUser = conversationUser;
this.webSocketTicket = webSocketTicket; this.webSocketTicket = webSocketTicket;
this.webSocketConnectionHelper = new WebSocketConnectionHelper(); this.webSocketConnectionHelper = new WebSocketConnectionHelper();
this.displayNameHashMap = new HashMap<>();
magicMap = new MagicMap(); magicMap = new MagicMap();
restartWebSocket(); restartWebSocket();
@ -166,6 +173,15 @@ public class MagicWebSocketInstance extends WebSocketListener {
} }
} }
} }
} else if (eventOverallWebSocketMessage.getEventMap().get("type").equals("join")) {
List<HashMap<String, Object>> joinEventMap = (List<HashMap<String, Object>>) eventOverallWebSocketMessage.getEventMap().get("join");
HashMap<String, Object> internalHashMap;
for (int i = 0; i < joinEventMap.size(); i++) {
internalHashMap = joinEventMap.get(i);
HashMap<String, Object> userMap = (HashMap<String, Object>) internalHashMap.get("user");
displayNameHashMap.put((String) internalHashMap.get("sessionid"), (String) userMap.get("displayname"));
userIdSesssionHashMap.put((String) internalHashMap.get("userid"), (String) internalHashMap.get("sessionid"));
}
} }
break; break;
case "participants": case "participants":
@ -291,4 +307,16 @@ public class MagicWebSocketInstance extends WebSocketListener {
boolean isPermanentlyClosed() { boolean isPermanentlyClosed() {
return isPermanentlyClosed; return isPermanentlyClosed;
} }
public String getDisplayNameForSession(String session) {
if (displayNameHashMap.containsKey(session)) {
return displayNameHashMap.get(session);
}
return NextcloudTalkApplication.getSharedApplication().getString(R.string.nc_nick_guest);
}
public String getSessionForUserId(String userId) {
return userIdSesssionHashMap.get(userId);
}
} }