From 61a2d389b4b8cb7f65bb9bfac67ff2259839b02b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 07:47:26 +0200 Subject: [PATCH 1/3] Remove fallback code for "no-ping" not being available The capability was introduces 2018 for Nextcloud 14 Signed-off-by: Joas Schilling --- .../java/com/nextcloud/talk/api/NcApi.java | 6 --- .../talk/controllers/CallController.java | 51 +------------------ .../CallNotificationController.java | 3 +- .../talk/controllers/ChatController.kt | 41 +-------------- .../talk/jobs/NotificationWorker.java | 11 +--- .../com/nextcloud/talk/utils/ApiUtils.java | 8 --- 6 files changed, 6 insertions(+), 114 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java index 8600ed610..2daa2750c 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java +++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java @@ -194,12 +194,6 @@ public interface NcApi { @DELETE Observable leaveCall(@Nullable @Header("Authorization") String authorization, @Url String url); - /* - Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken/ping - */ - @POST - Observable pingCall(@Nullable @Header("Authorization") String authorization, @Url String url); - @GET Observable getSignalingSettings(@Nullable @Header("Authorization") String authorization, @Url String url); 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 7dc788631..e6645f4e6 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -244,7 +244,6 @@ public class CallController extends BaseController { private VideoCapturer videoCapturer; private EglBase rootEglBase; private Disposable signalingDisposable; - private Disposable pingDisposable; private List iceServers; private CameraEnumerator cameraEnumerator; private String roomToken; @@ -260,7 +259,6 @@ public class CallController extends BaseController { private boolean audioOn = false; private boolean isMultiSession = false; - private boolean needsPing = true; private boolean isVoiceOnlyCall; private boolean isIncomingCallFromNotification; @@ -1207,15 +1205,6 @@ public class CallController extends BaseController { .getCapabilities().getSpreedCapability() .getFeatures().contains("multi-room-users"); - needsPing = !(capabilitiesOverall.getOcs().getData() - .getCapabilities() != null && capabilitiesOverall.getOcs().getData() - .getCapabilities().getSpreedCapability() != null && - capabilitiesOverall.getOcs().getData() - .getCapabilities().getSpreedCapability() - .getFeatures() != null && capabilitiesOverall.getOcs().getData() - .getCapabilities().getSpreedCapability() - .getFeatures().contains("no-ping")); - if (hasExternalSignalingServer) { setupAndInitiateWebSocketsConnection(); } else { @@ -1313,45 +1302,13 @@ public class CallController extends BaseController { ApplicationWideCurrentRoomHolder.getInstance().setInCall(true); - if (needsPing) { - ncApi.pingCall(credentials, ApiUtils.getUrlForCallPing(baseUrl, roomToken)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .repeatWhen(observable -> observable.delay(5000, TimeUnit.MILLISECONDS)) - .takeWhile(observable -> isConnectionEstablished()) - .retry(3, observable -> isConnectionEstablished()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - pingDisposable = d; - } - - @Override - public void onNext(GenericOverall genericOverall) { - - } - - @Override - public void onError(Throwable e) { - dispose(pingDisposable); - } - - @Override - public void onComplete() { - dispose(pingDisposable); - } - }); - } - // Start pulling signaling messages String urlToken = null; if (isMultiSession) { urlToken = roomToken; } - if (!conversationUser.hasSpreedFeatureCapability("no-ping") && !TextUtils.isEmpty(roomId)) { - NotificationUtils.INSTANCE.cancelExistingNotificationsForRoom(getApplicationContext(), conversationUser, roomId); - } else if (!TextUtils.isEmpty(roomToken)) { + if (!TextUtils.isEmpty(roomToken)) { NotificationUtils.INSTANCE.cancelExistingNotificationsForRoom(getApplicationContext(), conversationUser, roomToken); } @@ -1482,12 +1439,6 @@ public class CallController extends BaseController { if (disposable != null && !disposable.isDisposed()) { disposable.dispose(); } else if (disposable == null) { - - if (pingDisposable != null && !pingDisposable.isDisposed()) { - pingDisposable.dispose(); - pingDisposable = null; - } - if (signalingDisposable != null && !signalingDisposable.isDisposed()) { signalingDisposable.dispose(); signalingDisposable = null; 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 b225c12d8..52c0390b9 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -403,8 +403,7 @@ public class CallNotificationController extends BaseController { .incoming_gradient)); } - if ((AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 || AvatarStatusCodeHolder.getInstance().getStatusCode() == 0) && - userBeingCalled.hasSpreedFeatureCapability("no-ping")) { + if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 || AvatarStatusCodeHolder.getInstance().getStatusCode() == 0) { if (getActivity() != null) { Bitmap backgroundBitmap = bitmap.copy(bitmap.getConfig(), true); new BlurPostProcessor(5, getActivity()).process(backgroundBitmap); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index 7ae8d7f01..df594310f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -844,7 +844,7 @@ class ChatController(args: Bundle) : cancelNotificationsForCurrentConversation() if (inConversation) { - if (wasDetached && conversationUser?.hasSpreedFeatureCapability("no-ping") ?: false) { + if (wasDetached) { currentConversation?.sessionId = "0" wasDetached = false joinRoomWithPassword() @@ -854,12 +854,7 @@ class ChatController(args: Bundle) : private fun cancelNotificationsForCurrentConversation() { if (conversationUser != null) { - if (!conversationUser.hasSpreedFeatureCapability("no-ping") && !TextUtils.isEmpty(roomId)) { - NotificationUtils.cancelExistingNotificationsForRoom( - applicationContext, - conversationUser, roomId - ) - } else if (!TextUtils.isEmpty(roomToken)) { + if (!TextUtils.isEmpty(roomToken)) { NotificationUtils.cancelExistingNotificationsForRoom( applicationContext, conversationUser, roomToken!! @@ -882,7 +877,6 @@ class ChatController(args: Bundle) : } if (conversationUser != null && - conversationUser.hasSpreedFeatureCapability("no-ping") && activity != null && !activity?.isChangingConfigurations!! && !isLeavingForConversation @@ -927,35 +921,6 @@ class ChatController(args: Bundle) : } } - private fun startPing() { - if (conversationUser != null && !conversationUser.hasSpreedFeatureCapability("no-ping")) { - ncApi?.pingCall( - credentials, - ApiUtils.getUrlForCallPing( - conversationUser.baseUrl, - roomToken - ) - ) - ?.subscribeOn(Schedulers.io()) - ?.observeOn(AndroidSchedulers.mainThread()) - ?.repeatWhen { observable -> observable.delay(5000, TimeUnit.MILLISECONDS) } - ?.takeWhile { observable -> inConversation } - ?.retry(3) { observable -> inConversation } - ?.subscribe(object : Observer { - override fun onSubscribe(d: Disposable) { - disposableList.add(d) - } - - override fun onNext(genericOverall: GenericOverall) { - } - - override fun onError(e: Throwable) {} - - override fun onComplete() {} - }) - } - } - @OnClick(R.id.smileyButton) internal fun onSmileyClick() { emojiPopup?.toggle() @@ -991,7 +956,6 @@ class ChatController(args: Bundle) : ApplicationWideCurrentRoomHolder.getInstance().session = currentConversation?.sessionId - startPing() setupWebsocket() checkLobbyState() @@ -1029,7 +993,6 @@ class ChatController(args: Bundle) : currentConversation?.sessionId ) } - startPing() if (isFirstMessagesProcessing) { pullChatMessages(0) } else { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java index ad5f09d2e..a9932c2c3 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -617,12 +617,7 @@ public class NotificationWorker extends Worker { intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - if (!signatureVerification.getUserEntity().hasSpreedFeatureCapability - ("no-ping")) { - bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), decryptedPushMessage.getId()); - } else { - bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), decryptedPushMessage.getId()); - } + bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), decryptedPushMessage.getId()); bundle.putParcelable(BundleKeys.INSTANCE.getKEY_USER_ENTITY(), signatureVerification.getUserEntity()); @@ -633,9 +628,7 @@ public class NotificationWorker extends Worker { switch (decryptedPushMessage.getType()) { case "call": - if (!bundle.containsKey(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN())) { - context.startActivity(intent); - } else { + if (bundle.containsKey(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN())) { showNotificationForCallWithNoPing(intent); } break; 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 40a50f07e..9a5ac3cc6 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -295,14 +295,6 @@ public class ApiUtils { return retrofitBucket; } - /** - * @deprecated Method is only needed before Talk 4 which is from 2018 => todrop - */ - @Deprecated - public static String getUrlForCallPing(String baseUrl, String token) { - return getUrlForCall(1, baseUrl, token) + "/ping"; - } - public static String getUrlForUserProfile(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/user"; } From ca9a6220303760f9e1b5fdbd4cba56ace1a7e436 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 07:53:34 +0200 Subject: [PATCH 2/3] Capability multi-room-users was introduced 2018 Signed-off-by: Joas Schilling --- .../talk/controllers/CallController.java | 41 ++++--------------- 1 file changed, 8 insertions(+), 33 deletions(-) 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 e6645f4e6..3aea3dd8d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -258,8 +258,6 @@ public class CallController extends BaseController { private boolean videoOn = false; private boolean audioOn = false; - private boolean isMultiSession = false; - private boolean isVoiceOnlyCall; private boolean isIncomingCallFromNotification; private Handler callControlHandler = new Handler(); @@ -1196,15 +1194,7 @@ public class CallController extends BaseController { @Override public void onNext(CapabilitiesOverall capabilitiesOverall) { - isMultiSession = capabilitiesOverall.getOcs().getData() - .getCapabilities() != null && capabilitiesOverall.getOcs().getData() - .getCapabilities().getSpreedCapability() != null && - capabilitiesOverall.getOcs().getData() - .getCapabilities().getSpreedCapability() - .getFeatures() != null && capabilitiesOverall.getOcs().getData() - .getCapabilities().getSpreedCapability() - .getFeatures().contains("multi-room-users"); - + // FIXME check for compatible Call API version if (hasExternalSignalingServer) { setupAndInitiateWebSocketsConnection(); } else { @@ -1214,7 +1204,7 @@ public class CallController extends BaseController { @Override public void onError(Throwable e) { - isMultiSession = false; + } @Override @@ -1302,12 +1292,6 @@ public class CallController extends BaseController { ApplicationWideCurrentRoomHolder.getInstance().setInCall(true); - // Start pulling signaling messages - String urlToken = null; - if (isMultiSession) { - urlToken = roomToken; - } - if (!TextUtils.isEmpty(roomToken)) { NotificationUtils.INSTANCE.cancelExistingNotificationsForRoom(getApplicationContext(), conversationUser, roomToken); } @@ -1316,7 +1300,7 @@ public class CallController extends BaseController { int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, - baseUrl, urlToken)) + baseUrl, roomToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .repeatWhen(observable -> observable) @@ -1587,14 +1571,10 @@ public class CallController extends BaseController { @Override public void onNext(GenericOverall genericOverall) { - if (isMultiSession) { - if (shutDownView && getActivity() != null) { - getActivity().finish(); - } else if (!shutDownView && (currentCallStatus.equals(CallStatus.RECONNECTING) || currentCallStatus.equals(CallStatus.PUBLISHER_FAILED))) { - initiateCall(); - } - } else { - leaveRoom(shutDownView); + if (shutDownView && getActivity() != null) { + getActivity().finish(); + } else if (!shutDownView && (currentCallStatus.equals(CallStatus.RECONNECTING) || currentCallStatus.equals(CallStatus.PUBLISHER_FAILED))) { + initiateCall(); } } @@ -2007,14 +1987,9 @@ public class CallController extends BaseController { String stringToSend = stringBuilder.toString(); strings.add(stringToSend); - String urlToken = null; - if (isMultiSession) { - urlToken = roomToken; - } - int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); - ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, urlToken), + ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, roomToken), strings.toString()) .retry(3) .subscribeOn(Schedulers.io()) From e9e64771d59d52b857c7bcbd30feb584a4f2d251 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 7 May 2021 16:00:17 +0200 Subject: [PATCH 3/3] Fix ktlint Signed-off-by: Joas Schilling --- .../main/java/com/nextcloud/talk/controllers/ChatController.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index df594310f..125a9e138 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -150,7 +150,6 @@ import java.util.ArrayList import java.util.Date import java.util.HashMap import java.util.Objects -import java.util.concurrent.TimeUnit import javax.inject.Inject @AutoInjector(NextcloudTalkApplication::class)