From 3cd18d50cab5db7c672570e27a4f226b30f65ad5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 23 Apr 2021 11:54:41 +0200 Subject: [PATCH 01/23] APIv4 compatibility Signed-off-by: Joas Schilling --- .../CallNotificationController.java | 81 +++++++------------ .../com/nextcloud/talk/utils/ApiUtils.java | 26 +++++- 2 files changed, 52 insertions(+), 55 deletions(-) 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 2ccd5a57b..a045e6204 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -258,23 +258,27 @@ public class CallNotificationController extends BaseController { } private void handleFromNotification() { - boolean isConversationApiV3 = userBeingCalled.hasSpreedFeatureCapability("conversation-v3"); - if (isConversationApiV3) { - ncApi.getRoom(credentials, ApiUtils.getRoomV3(userBeingCalled.getBaseUrl(), roomId)) - .subscribeOn(Schedulers.io()) - .retry(3) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - disposablesList.add(d); - } + Integer apiVersion = ApiUtils.getApiVersion(userBeingCalled, "conversation", new int[] {4, 3, 1}); + if (apiVersion == null) { + return; + } - @Override - public void onNext(@NotNull RoomOverall roomOverall) { - currentConversation = roomOverall.getOcs().data; - runAllThings(); + ncApi.getRoom(credentials, ApiUtils.getRoom(apiVersion, userBeingCalled.getBaseUrl(), roomId)) + .subscribeOn(Schedulers.io()) + .retry(3) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + disposablesList.add(d); + } + @Override + public void onNext(@NotNull RoomOverall roomOverall) { + currentConversation = roomOverall.getOcs().data; + runAllThings(); + + if (apiVersion >= 3) { boolean hasCallFlags = userBeingCalled.hasSpreedFeatureCapability("conversation-call-flags"); if (hasCallFlags) { if (isInCallWithVideo(currentConversation.callFlag)) { @@ -286,46 +290,19 @@ public class CallNotificationController extends BaseController { } } } + } - @Override - public void onError(Throwable e) { + @SuppressLint("LongLogTag") + @Override + public void onError(Throwable e) { + Log.e(TAG, e.getMessage(), e); + } - } + @Override + public void onComplete() { - @Override - public void onComplete() { - - } - }); - } else { - ncApi.getRoom(credentials, ApiUtils.getRoom(userBeingCalled.getBaseUrl(), roomId)) - .subscribeOn(Schedulers.io()) - .retry(3) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - disposablesList.add(d); - } - - @SuppressLint("LongLogTag") - @Override - public void onNext(@NotNull RoomOverall roomOverall) { - currentConversation = roomOverall.getOcs().data; - runAllThings(); - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } + } + }); } private boolean isInCallWithVideo(int callFlag) { 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 14eecdf4a..663bf2bb9 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -26,6 +26,7 @@ import com.nextcloud.talk.BuildConfig; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.RetrofitBucket; +import com.nextcloud.talk.models.database.UserEntity; import java.util.HashMap; import java.util.Map; @@ -37,6 +38,7 @@ import okhttp3.Credentials; public class ApiUtils { private static String ocsApiVersion = "/ocs/v2.php"; private static String spreedApiVersion = "/apps/spreed/api/v1"; + private static String spreedApiBase = ocsApiVersion + "/apps/spreed/api/v"; private static String userAgent = "Mozilla/5.0 (Android) Nextcloud-Talk v"; @@ -122,12 +124,30 @@ public class ApiUtils { return baseUrl + ocsApiVersion + spreedApiVersion + "/room"; } + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getRoom(int, String, String)} instead. + */ + @Deprecated public static String getRoom(String baseUrl, String token) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token; + return getRoom(1, baseUrl, token); } - public static String getRoomV3(String baseUrl, String token) { - return baseUrl + ocsApiVersion + "/apps/spreed/api/v3" + "/room/" + token; + public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { + for (int version : versions) { + if (capabilities.hasSpreedFeatureCapability(apiName + "-v" + version)) { + return version; + } + } + return null; + } + + protected static String getApi(int version, String baseUrl) { + return baseUrl + spreedApiBase + version; + } + + public static String getRoom(int version, String baseUrl, String token) { + return getApi(version, baseUrl) + "/room/" + token; } public static RetrofitBucket getRetrofitBucketForCreateRoom(String baseUrl, String roomType, From 1a15bd9f5f2ab2540291f99a01d1eb2ba1625773 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 14:07:12 +0200 Subject: [PATCH 02/23] Deprecate all APIs without a specified version Signed-off-by: Joas Schilling --- .../CallNotificationController.java | 2 +- .../com/nextcloud/talk/utils/ApiUtils.java | 74 +++++++++++++++++-- 2 files changed, 69 insertions(+), 7 deletions(-) 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 a045e6204..3d327fb04 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -263,7 +263,7 @@ public class CallNotificationController extends BaseController { return; } - ncApi.getRoom(credentials, ApiUtils.getRoom(apiVersion, userBeingCalled.getBaseUrl(), roomId)) + ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, userBeingCalled.getBaseUrl(), roomId)) .subscribeOn(Schedulers.io()) .retry(3) .observeOn(AndroidSchedulers.mainThread()) 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 663bf2bb9..44b6339be 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -46,10 +46,16 @@ public class ApiUtils { return userAgent + BuildConfig.VERSION_NAME; } + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getUrlForRoomWebinaryLobby(int, String, String)} instead. + */ + @Deprecated public static String getUrlForLobbyForConversation(String baseUrl, String token) { return getRoom(baseUrl, token) + "/webinary/lobby"; } + @Deprecated public static String getUrlForRemovingParticipantFromConversation(String baseUrl, String roomToken, boolean isGuest) { String url = getUrlForParticipants(baseUrl, roomToken); @@ -102,16 +108,30 @@ public class ApiUtils { return retrofitBucket; } - + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getUrlForRoomNotificationLevel(int, String, String)} instead. + */ + @Deprecated public static String getUrlForSettingNotificationlevel(String baseUrl, String token) { return getRoom(baseUrl, token) + "/notify"; } + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getUrlForParticipantsActive(int, String, String)} instead. + */ + @Deprecated public static String getUrlForSettingMyselfAsActiveParticipant(String baseUrl, String token) { return getRoom(baseUrl, token) + "/participants/active"; } + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getUrlForParticipants(int, String, String)} instead. + */ + @Deprecated public static String getUrlForParticipants(String baseUrl, String token) { return getRoom(baseUrl, token) + "/participants"; } @@ -120,17 +140,22 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/cloud/capabilities"; } + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getUrlForRooms(int, String)} instead. + */ + @Deprecated public static String getUrlForGetRooms(String baseUrl) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room"; } /** * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getRoom(int, String, String)} instead. + * {@link ApiUtils#getUrlForRoom(int, String, String)} instead. */ @Deprecated public static String getRoom(String baseUrl, String token) { - return getRoom(1, baseUrl, token); + return getUrlForRoom(1, baseUrl, token); } public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { @@ -142,14 +167,35 @@ public class ApiUtils { return null; } - protected static String getApi(int version, String baseUrl) { + protected static String getUrlForApi(int version, String baseUrl) { return baseUrl + spreedApiBase + version; } - public static String getRoom(int version, String baseUrl, String token) { - return getApi(version, baseUrl) + "/room/" + token; + public static String getUrlForRooms(int version, String baseUrl) { + return getUrlForApi(version, baseUrl) + "/room"; } + public static String getUrlForRoom(int version, String baseUrl, String token) { + return getUrlForRooms(version, baseUrl) + "/" + token; + } + + public static String getUrlForParticipants(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/participants"; + } + + public static String getUrlForParticipantsActive(int version, String baseUrl, String token) { + return getUrlForParticipants(version, baseUrl, token) + "/active"; + } + + public static String getUrlForRoomNotificationLevel(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/notify"; + } + + public static String getUrlForRoomWebinaryLobby(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/webinary/lobby"; + } + + @Deprecated public static RetrofitBucket getRetrofitBucketForCreateRoom(String baseUrl, String roomType, @Nullable String invite, @Nullable String conversationName) { @@ -171,6 +217,7 @@ public class ApiUtils { return retrofitBucket; } + @Deprecated public static RetrofitBucket getRetrofitBucketForAddParticipant(String baseUrl, String token, String user) { RetrofitBucket retrofitBucket = new RetrofitBucket(); retrofitBucket.setUrl(baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/participants"); @@ -197,35 +244,43 @@ public class ApiUtils { return retrofitBucket; } + @Deprecated public static String getUrlForRemoveSelfFromRoom(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/participants/self"; } + @Deprecated public static String getUrlForRoomVisibility(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/public"; } + @Deprecated public static String getUrlForCall(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/call/" + token; } + @Deprecated public static String getUrlForCallPing(String baseUrl, String token) { return getUrlForCall(baseUrl, token) + "/ping"; } + @Deprecated public static String getUrlForChat(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token; } + @Deprecated public static String getUrlForExternalServerAuthBackend(String baseUrl) { return baseUrl + ocsApiVersion + spreedApiVersion + "/signaling/backend"; } + @Deprecated public static String getUrlForMentionSuggestions(String baseUrl, String token) { return getUrlForChat(baseUrl, token) + "/mentions"; } + @Deprecated public static String getUrlForSignaling(String baseUrl, @Nullable String token) { String signalingUrl = baseUrl + ocsApiVersion + spreedApiVersion + "/signaling"; if (token == null) { @@ -235,10 +290,12 @@ public class ApiUtils { } } + @Deprecated public static String getUrlForModerators(String baseUrl, String roomToken) { return getRoom(baseUrl, roomToken) + "/moderators"; } + @Deprecated public static String getUrlForSignalingSettings(String baseUrl) { return getUrlForSignaling(baseUrl, null) + "/settings"; } @@ -252,6 +309,7 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/cloud/users/" + userId; } + @Deprecated public static String getUrlForUserSettings(String baseUrl) { return baseUrl + ocsApiVersion + spreedApiVersion + "/settings/user"; } @@ -279,6 +337,7 @@ public class ApiUtils { return baseUrl + "/index.php/avatar/guest/" + Uri.encode(name) + "/" + avatarSize; } + @Deprecated public static String getUrlForPassword(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/password"; } @@ -299,6 +358,7 @@ public class ApiUtils { getApplicationContext().getResources().getString(R.string.nc_push_server_url) + "/devices"; } + @Deprecated public static String getUrlForConversationFavorites(String baseUrl, String roomToken) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + roomToken + "/favorite"; } @@ -307,6 +367,7 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/apps/notifications/api/v2/notifications/" + notificationId; } + @Deprecated public static String getUrlForReadOnlyState(String baseUrl, String roomToken) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + roomToken + "/read-only"; } @@ -323,6 +384,7 @@ public class ApiUtils { return baseUrl + "/remote.php/dav/files/" + user + "/" + remotePath; } + @Deprecated public static String getUrlForMessageDeletion(String baseUrl, String token, String messageId) { return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token + "/" + messageId; } From c3061df60bd989c1c25725d5687c752c555b89e6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 15:15:25 +0200 Subject: [PATCH 03/23] Allow to inject the api version into all methods for the room api Signed-off-by: Joas Schilling --- .../CallNotificationController.java | 2 + .../talk/controllers/ContactsController.java | 7 +- .../bottomsheet/OperationsMenuController.java | 62 ++++++++++---- .../talk/jobs/DeleteConversationWorker.java | 16 +++- .../talk/jobs/LeaveConversationWorker.java | 17 +++- .../talk/jobs/NotificationWorker.java | 10 ++- .../com/nextcloud/talk/utils/ApiUtils.java | 80 +++++++++---------- .../DatabaseStorageModule.java | 13 ++- 8 files changed, 142 insertions(+), 65 deletions(-) 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 3d327fb04..ba9c40287 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -257,9 +257,11 @@ public class CallNotificationController extends BaseController { } + @SuppressLint("LongLogTag") private void handleFromNotification() { Integer apiVersion = ApiUtils.getApiVersion(userBeingCalled, "conversation", new int[] {4, 3, 1}); if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; } 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 4567d7f02..9366590b2 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -308,9 +308,12 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), roomOverall.getOcs().getData().getToken()); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), roomOverall.getOcs().getData().getRoomId()); - if (currentUser.hasSpreedFeatureCapability("chat-v2")) { + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", + new int[] {1}); + if (apiVersion != null && currentUser.hasSpreedFeatureCapability("chat-v2")) { + ncApi.getRoom(credentials, - ApiUtils.getRoom(currentUser.getBaseUrl(), + ApiUtils.getUrlForRoom(apiVersion, currentUser.getBaseUrl(), roomOverall.getOcs().getData().getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index fd2eeb9d4..afaa92c72 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -20,6 +20,7 @@ package com.nextcloud.talk.controllers.bottomsheet; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.net.Uri; @@ -82,6 +83,8 @@ import retrofit2.HttpException; @AutoInjector(NextcloudTalkApplication.class) public class OperationsMenuController extends BaseController { + private static final String TAG = "OperationsMenuController"; + @BindView(R.id.progress_bar) ProgressBar progressBar; @@ -169,6 +172,7 @@ public class OperationsMenuController extends BaseController { processOperation(); } + @SuppressLint("LongLogTag") private void processOperation() { currentUser = userUtils.getCurrentUser(); OperationsObserver operationsObserver = new OperationsObserver(); @@ -189,9 +193,18 @@ public class OperationsMenuController extends BaseController { credentials = null; } + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", + new int[] {1}); + + if(apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + switch (operationCode) { case 2: - ncApi.renameRoom(credentials, ApiUtils.getRoom(currentUser.getBaseUrl(), conversation.getToken()), + ncApi.renameRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, currentUser.getBaseUrl(), + conversation.getToken()), conversation.getName()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -199,8 +212,8 @@ public class OperationsMenuController extends BaseController { .subscribe(operationsObserver); break; case 3: - ncApi.makeRoomPublic(credentials, ApiUtils.getUrlForRoomVisibility(currentUser.getBaseUrl(), conversation - .getToken())) + ncApi.makeRoomPublic(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(), + conversation.getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) @@ -213,8 +226,8 @@ public class OperationsMenuController extends BaseController { if (conversation.getPassword() != null) { pass = conversation.getPassword(); } - ncApi.setPassword(credentials, ApiUtils.getUrlForPassword(currentUser.getBaseUrl(), - conversation.getToken()), pass) + ncApi.setPassword(credentials, ApiUtils.getUrlForRoomPassword(apiVersion, currentUser.getBaseUrl(), + conversation.getToken()), pass) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) @@ -224,15 +237,16 @@ public class OperationsMenuController extends BaseController { // Operation 7 is sharing, so we handle this differently break; case 8: - ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomVisibility(currentUser.getBaseUrl(), conversation - .getToken())) + ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, + currentUser.getBaseUrl(), + conversation.getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) .subscribe(operationsObserver); break; case 10: - ncApi.getRoom(credentials, ApiUtils.getRoom(baseUrl, conversationToken)) + ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, baseUrl, conversationToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) @@ -300,7 +314,8 @@ public class OperationsMenuController extends BaseController { conversation = roomOverall.getOcs().getData(); ncApi.getRoom(credentials, - ApiUtils.getRoom(currentUser.getBaseUrl(), conversation.getToken())) + ApiUtils.getUrlForRoom(apiVersion, currentUser.getBaseUrl(), + conversation.getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -349,15 +364,19 @@ public class OperationsMenuController extends BaseController { case 97: case 98: if (operationCode == 97) { - ncApi.removeConversationFromFavorites(credentials, ApiUtils.getUrlForConversationFavorites(currentUser.getBaseUrl(), - conversation.getToken())) + ncApi.removeConversationFromFavorites(credentials, + ApiUtils.getUrlForRoomFavorite(apiVersion, + currentUser.getBaseUrl(), + conversation.getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) .subscribe(operationsObserver); } else { - ncApi.addConversationToFavorites(credentials, ApiUtils.getUrlForConversationFavorites(currentUser.getBaseUrl(), - conversation.getToken())) + ncApi.addConversationToFavorites(credentials, + ApiUtils.getUrlForRoomFavorite(apiVersion, + currentUser.getBaseUrl(), + conversation.getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) @@ -365,7 +384,9 @@ public class OperationsMenuController extends BaseController { } break; case 99: - ncApi.joinRoom(credentials, ApiUtils.getUrlForSettingMyselfAsActiveParticipant(baseUrl, conversationToken), + ncApi.joinRoom(credentials, ApiUtils.getUrlForParticipantsActive(apiVersion, + baseUrl, + conversationToken), callPassword) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -378,8 +399,19 @@ public class OperationsMenuController extends BaseController { } } + @SuppressLint("LongLogTag") private void performGroupCallWorkaround(String credentials) { - ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomVisibility(currentUser.getBaseUrl(), conversation.getToken())) + + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", + new int[] {1}); + + if(apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(), + conversation.getToken())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java index 0bde3e7ac..375aac09f 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java @@ -20,7 +20,10 @@ package com.nextcloud.talk.jobs; +import android.annotation.SuppressLint; import android.content.Context; +import android.util.Log; + import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.Worker; @@ -47,6 +50,7 @@ import java.net.CookieManager; @AutoInjector(NextcloudTalkApplication.class) public class DeleteConversationWorker extends Worker { + private static final String TAG = "DeleteConversationWorker"; @Inject Retrofit retrofit; @@ -66,6 +70,7 @@ public class DeleteConversationWorker extends Worker { NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); } + @SuppressLint("LongLogTag") @NonNull @Override public Result doWork() { @@ -75,6 +80,14 @@ public class DeleteConversationWorker extends Worker { UserEntity operationUser = userUtils.getUserWithId(operationUserId); if (operationUser != null) { + Integer apiVersion = ApiUtils.getApiVersion(operationUser, "conversation", + new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return Result.failure(); + } + String credentials = ApiUtils.getCredentials(operationUser.getUsername(), operationUser.getToken()); ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new JavaNetCookieJar(new CookieManager())).build()).build().create(NcApi.class); @@ -82,7 +95,8 @@ public class DeleteConversationWorker extends Worker { EventStatus eventStatus = new EventStatus(operationUser.getId(), EventStatus.EventType.CONVERSATION_UPDATE, true); - ncApi.deleteRoom(credentials, ApiUtils.getRoom(operationUser.getBaseUrl(), conversationToken)) + ncApi.deleteRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, operationUser.getBaseUrl(), + conversationToken)) .subscribeOn(Schedulers.io()) .blockingSubscribe(new Observer() { Disposable disposable; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java index c1a59096f..fd58d329b 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java @@ -21,6 +21,8 @@ package com.nextcloud.talk.jobs; import android.content.Context; +import android.util.Log; + import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.Worker; @@ -47,6 +49,9 @@ import java.net.CookieManager; @AutoInjector(NextcloudTalkApplication.class) public class LeaveConversationWorker extends Worker { + + private static final String TAG = "LeaveConversationWorker"; + @Inject Retrofit retrofit; @@ -82,7 +87,17 @@ public class LeaveConversationWorker extends Worker { EventStatus eventStatus = new EventStatus(operationUser.getId(), EventStatus.EventType.CONVERSATION_UPDATE, true); - ncApi.removeSelfFromRoom(credentials, ApiUtils.getUrlForRemoveSelfFromRoom(operationUser.getBaseUrl(), conversationToken)) + Integer apiVersion = ApiUtils.getApiVersion(operationUser, "conversation", + new int[] {1}); + + if(apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return Result.failure(); + } + + ncApi.removeSelfFromRoom(credentials, ApiUtils.getUrlForParticipantsSelf(apiVersion, + operationUser.getBaseUrl(), + conversationToken)) .subscribeOn(Schedulers.io()) .blockingSubscribe(new Observer() { Disposable disposable; 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 60ef8115f..7fa941f83 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -152,8 +152,16 @@ public class NotificationWorker extends Worker { importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue()); } + Integer apiVersion = ApiUtils.getApiVersion(userEntity, "conversation", + new int[] {1}); - ncApi.getRoom(credentials, ApiUtils.getRoom(userEntity.getBaseUrl(), + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + + ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, userEntity.getBaseUrl(), intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) .blockingSubscribe(new Observer() { @Override 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 44b6339be..33cfe43c4 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -52,12 +52,12 @@ public class ApiUtils { */ @Deprecated public static String getUrlForLobbyForConversation(String baseUrl, String token) { - return getRoom(baseUrl, token) + "/webinary/lobby"; + return getUrlForRoomWebinaryLobby(1, baseUrl, token); } @Deprecated public static String getUrlForRemovingParticipantFromConversation(String baseUrl, String roomToken, boolean isGuest) { - String url = getUrlForParticipants(baseUrl, roomToken); + String url = getUrlForParticipants(1, baseUrl, roomToken); if (isGuest) { url += "/guests"; @@ -108,22 +108,13 @@ public class ApiUtils { return retrofitBucket; } - /** - * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForRoomNotificationLevel(int, String, String)} instead. - */ - @Deprecated - public static String getUrlForSettingNotificationlevel(String baseUrl, String token) { - return getRoom(baseUrl, token) + "/notify"; - } - /** * @deprecated Please specify the api version you want to use via * {@link ApiUtils#getUrlForParticipantsActive(int, String, String)} instead. */ @Deprecated public static String getUrlForSettingMyselfAsActiveParticipant(String baseUrl, String token) { - return getRoom(baseUrl, token) + "/participants/active"; + return getUrlForParticipantsActive(1, baseUrl, token); } @@ -187,10 +178,34 @@ public class ApiUtils { return getUrlForParticipants(version, baseUrl, token) + "/active"; } + public static String getUrlForParticipantsSelf(int version, String baseUrl, String token) { + return getUrlForParticipants(version, baseUrl, token) + "/self"; + } + + public static String getUrlForRoomFavorite(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/favorite"; + } + + public static String getUrlForRoomModerators(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/moderators"; + } + public static String getUrlForRoomNotificationLevel(int version, String baseUrl, String token) { return getUrlForRoom(version, baseUrl, token) + "/notify"; } + public static String getUrlForRoomPublic(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/public"; + } + + public static String getUrlForRoomPassword(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/password"; + } + + public static String getUrlForRoomReadOnlyState(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/read-only"; + } + public static String getUrlForRoomWebinaryLobby(int version, String baseUrl, String token) { return getUrlForRoom(version, baseUrl, token) + "/webinary/lobby"; } @@ -244,18 +259,9 @@ public class ApiUtils { return retrofitBucket; } - @Deprecated - public static String getUrlForRemoveSelfFromRoom(String baseUrl, String token) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/participants/self"; - } - - @Deprecated - public static String getUrlForRoomVisibility(String baseUrl, String token) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/public"; - } - @Deprecated public static String getUrlForCall(String baseUrl, String token) { + // FIXME user APIv4 return baseUrl + ocsApiVersion + spreedApiVersion + "/call/" + token; } @@ -265,23 +271,22 @@ public class ApiUtils { return getUrlForCall(baseUrl, token) + "/ping"; } - @Deprecated public static String getUrlForChat(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token; } @Deprecated public static String getUrlForExternalServerAuthBackend(String baseUrl) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/signaling/backend"; + return getUrlForSignaling(baseUrl, null) + "/backend"; } - @Deprecated public static String getUrlForMentionSuggestions(String baseUrl, String token) { return getUrlForChat(baseUrl, token) + "/mentions"; } @Deprecated public static String getUrlForSignaling(String baseUrl, @Nullable String token) { + // FIXME use APIv2 ? String signalingUrl = baseUrl + ocsApiVersion + spreedApiVersion + "/signaling"; if (token == null) { return signalingUrl; @@ -290,9 +295,13 @@ public class ApiUtils { } } + /** + * @deprecated Please specify the api version you want to use via + * {@link ApiUtils#getUrlForRoomModerators(int, String, String)} instead. + */ @Deprecated public static String getUrlForModerators(String baseUrl, String roomToken) { - return getRoom(baseUrl, roomToken) + "/moderators"; + return getUrlForRoomModerators(1, baseUrl, roomToken); } @Deprecated @@ -309,7 +318,6 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/cloud/users/" + userId; } - @Deprecated public static String getUrlForUserSettings(String baseUrl) { return baseUrl + ocsApiVersion + spreedApiVersion + "/settings/user"; } @@ -337,11 +345,6 @@ public class ApiUtils { return baseUrl + "/index.php/avatar/guest/" + Uri.encode(name) + "/" + avatarSize; } - @Deprecated - public static String getUrlForPassword(String baseUrl, String token) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/password"; - } - public static String getCredentials(String username, String token) { if (TextUtils.isEmpty(username) && TextUtils.isEmpty(token)) { return null; @@ -358,20 +361,10 @@ public class ApiUtils { getApplicationContext().getResources().getString(R.string.nc_push_server_url) + "/devices"; } - @Deprecated - public static String getUrlForConversationFavorites(String baseUrl, String roomToken) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + roomToken + "/favorite"; - } - public static String getUrlForNotificationWithId(String baseUrl, String notificationId) { return baseUrl + ocsApiVersion + "/apps/notifications/api/v2/notifications/" + notificationId; } - @Deprecated - public static String getUrlForReadOnlyState(String baseUrl, String roomToken) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + roomToken + "/read-only"; - } - public static String getUrlForSearchByNumber(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/users/search/by-phone"; } @@ -384,9 +377,8 @@ public class ApiUtils { return baseUrl + "/remote.php/dav/files/" + user + "/" + remotePath; } - @Deprecated public static String getUrlForMessageDeletion(String baseUrl, String token, String messageId) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token + "/" + messageId; + return getUrlForChat(baseUrl, token) + "/" + messageId; } public static String getUrlForTempAvatar(String baseUrl) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java index 61f127a95..10853d5d1 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java @@ -22,6 +22,8 @@ package com.nextcloud.talk.utils.preferences.preferencestorage; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; + import autodagger.AutoInjector; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -40,6 +42,8 @@ import java.util.Set; @AutoInjector(NextcloudTalkApplication.class) public class DatabaseStorageModule implements StorageModule { + private static final String TAG = "DatabaseStorageModule"; + @Inject ArbitraryStorageUtils arbitraryStorageUtils; @@ -53,6 +57,7 @@ public class DatabaseStorageModule implements StorageModule { private boolean lobbyValue; private String messageNotificationLevel; + public DatabaseStorageModule(UserEntity conversationUser, String conversationToken) { NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); @@ -92,8 +97,14 @@ public class DatabaseStorageModule implements StorageModule { intValue = 0; } + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {4, 1}); + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + } + ncApi.setNotificationLevel(ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()), - ApiUtils.getUrlForSettingNotificationlevel(conversationUser.getBaseUrl(), conversationToken), + ApiUtils.getUrlForRoomNotificationLevel(apiVersion, conversationUser.getBaseUrl(), + conversationToken), intValue) .subscribeOn(Schedulers.io()) .subscribe(new Observer() { From ad71cc3a9753813fd687b6040d7c2c9e3ee2e713 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 15:24:07 +0200 Subject: [PATCH 04/23] Log an error when an API call didn't check APIv4 Signed-off-by: Joas Schilling --- .../java/com/nextcloud/talk/utils/ApiUtils.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 33cfe43c4..479bb9b32 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -21,6 +21,7 @@ package com.nextcloud.talk.utils; import android.net.Uri; import android.text.TextUtils; +import android.util.Log; import com.nextcloud.talk.BuildConfig; import com.nextcloud.talk.R; @@ -28,7 +29,10 @@ import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.RetrofitBucket; import com.nextcloud.talk.models.database.UserEntity; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import androidx.annotation.DimenRes; @@ -36,6 +40,7 @@ import androidx.annotation.Nullable; import okhttp3.Credentials; public class ApiUtils { + private static final String TAG = "ApiUtils"; private static String ocsApiVersion = "/ocs/v2.php"; private static String spreedApiVersion = "/apps/spreed/api/v1"; private static String spreedApiBase = ocsApiVersion + "/apps/spreed/api/v"; @@ -150,8 +155,17 @@ public class ApiUtils { } public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { + boolean checkedConversationV4 = !apiName.equals("conversation"); + for (int version : versions) { + checkedConversationV4 |= version == 4; + if (capabilities.hasSpreedFeatureCapability(apiName + "-v" + version)) { + if (!checkedConversationV4) { + Exception e = new Exception("Api call did not try conversation-v4 api"); + Log.e(TAG, e.getMessage(), e); + } + return version; } } From 68369873f4ca35a6672a9bbe3cb5a8dae42265ec Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 15:26:40 +0200 Subject: [PATCH 05/23] Use new method instead of copied behaviour Signed-off-by: Joas Schilling --- app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 479bb9b32..9974ca27a 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -129,7 +129,7 @@ public class ApiUtils { */ @Deprecated public static String getUrlForParticipants(String baseUrl, String token) { - return getRoom(baseUrl, token) + "/participants"; + return getUrlForParticipants(1, baseUrl, token); } public static String getUrlForCapabilities(String baseUrl) { @@ -142,7 +142,7 @@ public class ApiUtils { */ @Deprecated public static String getUrlForGetRooms(String baseUrl) { - return baseUrl + ocsApiVersion + spreedApiVersion + "/room"; + return getUrlForRooms(1, baseUrl); } /** From f32b25c45558010c185b68f19a84022a44ade655 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 16:44:13 +0200 Subject: [PATCH 06/23] Fix old APIs Signed-off-by: Joas Schilling --- .../com/nextcloud/talk/utils/ApiUtils.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) 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 9974ca27a..5e51b9b02 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -155,19 +155,32 @@ public class ApiUtils { } public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { - boolean checkedConversationV4 = !apiName.equals("conversation"); + if (apiName.equals("conversation")) { + boolean hasApiV4 = false; + for (int version : versions) { + hasApiV4 |= version == 4; + } + + if (!hasApiV4) { + Exception e = new Exception("Api call did not try conversation-v4 api"); + Log.d(TAG, e.getMessage(), e); + } + } for (int version : versions) { - checkedConversationV4 |= version == 4; - if (capabilities.hasSpreedFeatureCapability(apiName + "-v" + version)) { - if (!checkedConversationV4) { - Exception e = new Exception("Api call did not try conversation-v4 api"); - Log.e(TAG, e.getMessage(), e); - } - return version; } + + // Fallback for old API versions + if (apiName.equals("conversation") && (version == 1 || version == 2)) { + if (capabilities.hasSpreedFeatureCapability(apiName + "-v2")) { + return version; + } + if (version == 1 && capabilities.hasSpreedFeatureCapability(apiName)) { + return version; + } + } } return null; } From 115154331dc3c745db40c5a211213021126bb962 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 16:44:55 +0200 Subject: [PATCH 07/23] Fix more java calls Signed-off-by: Joas Schilling --- .../talk/controllers/ConversationsListController.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index 2fb61a98e..5eac81656 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -418,7 +418,15 @@ public class ConversationsListController extends BaseController implements Searc callItems = new ArrayList<>(); - roomsQueryDisposable = ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(currentUser.getBaseUrl())) + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {4, 1}); + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + + roomsQueryDisposable = ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, + currentUser.getBaseUrl())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(roomsOverall -> { From ccd752b4cabebda893699e850533aee0b5a89562 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 17:13:27 +0200 Subject: [PATCH 08/23] Fix some kotlin files to allow api switching Signed-off-by: Joas Schilling --- .../nextcloud/talk/activities/MainActivity.kt | 12 ++++- .../talk/controllers/ChatController.kt | 23 +++++++++- .../controllers/ConversationInfoController.kt | 44 ++++++++++++++++--- .../com/nextcloud/talk/utils/ApiUtils.java | 30 +++---------- 4 files changed, 76 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index 897ebbb15..a6ca9b1d3 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -28,6 +28,7 @@ import android.os.Bundle import android.os.Handler import android.provider.ContactsContract import android.text.TextUtils +import android.util.Log import android.view.ViewGroup import androidx.annotation.RequiresApi import autodagger.AutoInjector @@ -48,6 +49,7 @@ import com.nextcloud.talk.R import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.controllers.CallNotificationController +import com.nextcloud.talk.controllers.ChatController import com.nextcloud.talk.controllers.ConversationsListController import com.nextcloud.talk.controllers.LockedController import com.nextcloud.talk.controllers.ServerSelectionController @@ -249,9 +251,17 @@ class MainActivity : BaseActivity(), ActionBarProvider { bundle.putString(KEY_ROOM_TOKEN, roomOverall.ocs.data.token) bundle.putString(KEY_ROOM_ID, roomOverall.ocs.data.roomId) if (currentUser.hasSpreedFeatureCapability("chat-v2")) { + val apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi.getRoom( credentials, - ApiUtils.getRoom( + ApiUtils.getUrlForRoom( + apiVersion, currentUser.baseUrl, roomOverall.ocs.data.token ) 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 ea65f469f..af8292652 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -82,6 +82,7 @@ import com.facebook.imagepipeline.image.CloseableImage import com.google.android.flexbox.FlexboxLayout import com.nextcloud.talk.R import com.nextcloud.talk.activities.MagicCallActivity +import com.nextcloud.talk.activities.MainActivity import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder import com.nextcloud.talk.adapters.messages.MagicOutcomingTextMessageViewHolder import com.nextcloud.talk.adapters.messages.MagicPreviewMessageViewHolder @@ -293,7 +294,14 @@ class ChatController(args: Bundle) : } if (conversationUser != null) { - ncApi?.getRoom(credentials, ApiUtils.getRoom(conversationUser.baseUrl, roomToken)) + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + + ncApi?.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser.baseUrl, roomToken)) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer { @@ -332,7 +340,18 @@ class ChatController(args: Bundle) : } private fun handleFromNotification() { - ncApi?.getRooms(credentials, ApiUtils.getUrlForGetRooms(conversationUser?.baseUrl)) + if (ncApi == null) { + return + } + + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + + ncApi?.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, conversationUser?.baseUrl)) ?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer { override fun onSubscribe(d: Disposable) { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index dda408a6c..0de0eccdf 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -20,11 +20,13 @@ package com.nextcloud.talk.controllers +import android.annotation.SuppressLint import android.content.Context import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Bundle import android.text.TextUtils +import android.util.Log import android.view.LayoutInflater import android.view.MenuItem import android.view.View @@ -298,6 +300,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } } + @SuppressLint("LongLogTag") fun submitLobbyChanges() { val state = if ( ( @@ -306,9 +309,17 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA ) as SwitchCompat ).isChecked ) 1 else 0 + + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi.setLobbyForConversation( ApiUtils.getCredentials(conversationUser!!.username, conversationUser.token), - ApiUtils.getUrlForLobbyForConversation(conversationUser.baseUrl, conversation!!.token), + ApiUtils.getUrlForRoomWebinaryLobby(apiVersion, conversationUser.baseUrl, conversation!!.token), state, conversation!!.lobbyTimer ) @@ -438,9 +449,16 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } private fun getListOfParticipants() { + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi.getPeersForCall( credentials, - ApiUtils.getUrlForParticipants(conversationUser!!.baseUrl, conversationToken) + ApiUtils.getUrlForParticipants(apiVersion, conversationUser!!.baseUrl, conversationToken) ) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -527,7 +545,14 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } private fun fetchRoomInfo() { - ncApi.getRoom(credentials, ApiUtils.getRoom(conversationUser!!.baseUrl, conversationToken)) + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + + ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser!!.baseUrl, conversationToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer { @@ -701,11 +726,18 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA title(text = participant.displayName) listItemsWithImage(items = items) { dialog, index, _ -> + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + } + if (index == 0) { if (participant.type == Participant.ParticipantType.MODERATOR) { ncApi.demoteModeratorToUser( credentials, - ApiUtils.getUrlForModerators(conversationUser.baseUrl, conversation!!.token), + ApiUtils.getUrlForRoomModerators(apiVersion, conversationUser.baseUrl, + conversation!!.token), participant.userId ) .subscribeOn(Schedulers.io()) @@ -716,7 +748,8 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } else if (participant.type == Participant.ParticipantType.USER) { ncApi.promoteUserToModerator( credentials, - ApiUtils.getUrlForModerators(conversationUser.baseUrl, conversation!!.token), + ApiUtils.getUrlForRoomModerators(apiVersion, conversationUser.baseUrl, + conversation!!.token), participant.userId ) .subscribeOn(Schedulers.io()) @@ -771,6 +804,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA companion object { + private val TAG = "ConversationInfoController" private const val ID_DELETE_CONVERSATION_DIALOG = 0 } 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 5e51b9b02..86701f3d6 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -53,13 +53,8 @@ public class ApiUtils { /** * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForRoomWebinaryLobby(int, String, String)} instead. + * {@link ApiUtils#getUrlForAttendees(int, String, String)} instead. */ - @Deprecated - public static String getUrlForLobbyForConversation(String baseUrl, String token) { - return getUrlForRoomWebinaryLobby(1, baseUrl, token); - } - @Deprecated public static String getUrlForRemovingParticipantFromConversation(String baseUrl, String roomToken, boolean isGuest) { String url = getUrlForParticipants(1, baseUrl, roomToken); @@ -122,16 +117,6 @@ public class ApiUtils { return getUrlForParticipantsActive(1, baseUrl, token); } - - /** - * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForParticipants(int, String, String)} instead. - */ - @Deprecated - public static String getUrlForParticipants(String baseUrl, String token) { - return getUrlForParticipants(1, baseUrl, token); - } - public static String getUrlForCapabilities(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/capabilities"; } @@ -145,15 +130,6 @@ public class ApiUtils { return getUrlForRooms(1, baseUrl); } - /** - * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForRoom(int, String, String)} instead. - */ - @Deprecated - public static String getRoom(String baseUrl, String token) { - return getUrlForRoom(1, baseUrl, token); - } - public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { if (apiName.equals("conversation")) { boolean hasApiV4 = false; @@ -197,6 +173,10 @@ public class ApiUtils { return getUrlForRooms(version, baseUrl) + "/" + token; } + public static String getUrlForAttendees(int version, String baseUrl, String token) { + return getUrlForRoom(version, baseUrl, token) + "/attendees"; + } + public static String getUrlForParticipants(int version, String baseUrl, String token) { return getUrlForRoom(version, baseUrl, token) + "/participants"; } From 176612514987f58777238c1fe348eb243a49d2da Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 17:14:26 +0200 Subject: [PATCH 09/23] Move account verification to capabilities Signed-off-by: Joas Schilling --- .../AccountVerificationController.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java index 9ad6f13a6..30f1f532b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java @@ -46,6 +46,7 @@ import com.nextcloud.talk.jobs.CapabilitiesWorker; import com.nextcloud.talk.jobs.PushRegistrationWorker; import com.nextcloud.talk.jobs.SignalingSettingsWorker; import com.nextcloud.talk.models.database.UserEntity; +import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.models.json.generic.Status; import com.nextcloud.talk.models.json.conversations.RoomsOverall; import com.nextcloud.talk.models.json.userprofile.UserProfileOverall; @@ -221,17 +222,35 @@ public class AccountVerificationController extends BaseController { } private void findServerTalkApp(String credentials) { - ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(baseUrl)) + ncApi.getCapabilities(credentials, ApiUtils.getUrlForCapabilities(baseUrl)) .subscribeOn(Schedulers.io()) - .subscribe(new Observer() { + .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { disposables.add(d); } @Override - public void onNext(RoomsOverall roomsOverall) { - fetchProfile(credentials); + public void onNext(CapabilitiesOverall capabilitiesOverall) { + boolean hasTalk = + capabilitiesOverall.getOcs().getData().getCapabilities() != null + && capabilitiesOverall.getOcs().getData().getCapabilities().getSpreedCapability() != null + && capabilitiesOverall.getOcs().getData().getCapabilities().getSpreedCapability().getFeatures() != null + && !capabilitiesOverall.getOcs().getData().getCapabilities().getSpreedCapability().getFeatures().isEmpty(); + + if (hasTalk) { + fetchProfile(credentials); + } else { + if (getActivity() != null && getResources() != null) { + getActivity().runOnUiThread(() -> progressText.setText(String.format(getResources().getString( + R.string.nc_nextcloud_talk_app_not_installed), getResources().getString(R.string.nc_app_name)))); + } + + ApplicationWideMessageHolder.getInstance().setMessageType( + ApplicationWideMessageHolder.MessageType.SERVER_WITHOUT_TALK); + + abortVerification(); + } } @Override From 33de3ed330a5676191f8444797c84a8d304d5cb9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 3 May 2021 17:50:23 +0200 Subject: [PATCH 10/23] Final batch of API version injection Signed-off-by: Joas Schilling --- .../nextcloud/talk/activities/MainActivity.kt | 9 ++- .../talk/controllers/CallController.java | 29 +++++++- .../talk/controllers/ChatController.kt | 30 +++++++- .../talk/controllers/ContactsController.java | 27 ++++++- .../bottomsheet/OperationsMenuController.java | 26 +++++-- .../jobs/AddParticipantsToConversation.java | 20 ++++- .../talk/jobs/LeaveConversationWorker.java | 2 +- .../com/nextcloud/talk/utils/ApiUtils.java | 73 ++++++------------- 8 files changed, 142 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index a6ca9b1d3..4608b09c7 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -231,9 +231,16 @@ class MainActivity : BaseActivity(), ActionBarProvider { val roomType = "1" val currentUser = userUtils.currentUser ?: return + val apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + val credentials = ApiUtils.getCredentials(currentUser.username, currentUser.token) val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom( - currentUser.baseUrl, roomType, + apiVersion, currentUser.baseUrl, roomType, userId, null ) ncApi.createRoom( 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 21416baca..80365056d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -441,7 +441,14 @@ public class CallController extends BaseController { } private void handleFromNotification() { - ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(baseUrl)) + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, baseUrl)) .retry(3) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -1234,9 +1241,16 @@ public class CallController extends BaseController { private void joinRoomAndCall() { callSession = ApplicationWideCurrentRoomHolder.getInstance().getSession(); + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", + new int[] {1}); + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + if (TextUtils.isEmpty(callSession)) { - ncApi.joinRoom(credentials, ApiUtils.getUrlForSettingMyselfAsActiveParticipant(baseUrl, - roomToken), conversationPassword) + ncApi.joinRoom(credentials, ApiUtils.getUrlForParticipantsActive(apiVersion, baseUrl, roomToken), + conversationPassword) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(3) @@ -1648,7 +1662,14 @@ public class CallController extends BaseController { } private void leaveRoom(boolean shutDownView) { - ncApi.leaveRoom(credentials, ApiUtils.getUrlForSettingMyselfAsActiveParticipant(baseUrl, roomToken)) + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", + new int[] {1}); + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.leaveRoom(credentials, ApiUtils.getUrlForParticipantsActive(apiVersion, baseUrl, roomToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { 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 af8292652..df3f53d2b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -977,9 +977,17 @@ class ChatController(args: Bundle) : if (currentConversation == null || TextUtils.isEmpty(currentConversation?.sessionId) || currentConversation?.sessionId == "0" ) { + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi?.joinRoom( credentials, - ApiUtils.getUrlForSettingMyselfAsActiveParticipant(conversationUser?.baseUrl, roomToken), roomPassword + ApiUtils.getUrlForParticipantsActive(apiVersion, conversationUser?.baseUrl, roomToken), + roomPassword ) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) @@ -1043,9 +1051,17 @@ class ChatController(args: Bundle) : } private fun leaveRoom() { + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi?.leaveRoom( credentials, - ApiUtils.getUrlForSettingMyselfAsActiveParticipant( + ApiUtils.getUrlForParticipantsActive( + apiVersion, conversationUser?.baseUrl, roomToken ) @@ -1762,8 +1778,16 @@ class ChatController(args: Bundle) : if (currentConversation?.type != Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL || currentConversation?.name != userMentionClickEvent.userId ) { + + val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom( - conversationUser?.baseUrl, "1", + apiVersion, conversationUser?.baseUrl, "1", userMentionClickEvent.userId, null ) 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 9366590b2..9026f0cd6 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -288,8 +288,18 @@ public class ContactsController extends BaseController implements SearchView.OnQ userId = selectedUserIds.iterator().next(); } - RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(currentUser.getBaseUrl(), roomType, - userId, null); + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion, + currentUser.getBaseUrl(), + roomType, + userId, + null); ncApi.createRoom(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) .subscribeOn(Schedulers.io()) @@ -851,7 +861,18 @@ public class ContactsController extends BaseController implements SearchView.OnQ roomType = "2"; } - RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(currentUser.getBaseUrl(), roomType, userItem.getModel().getUserId(), null); + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return false; + } + + RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion, + currentUser.getBaseUrl(), + roomType, + userItem.getModel().getUserId(), + null); ncApi.createRoom(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index afaa92c72..9208daa88 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -196,7 +196,7 @@ public class OperationsMenuController extends BaseController { Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); - if(apiVersion == null) { + if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; } @@ -285,7 +285,7 @@ public class OperationsMenuController extends BaseController { if (conversationType.equals(Conversation.ConversationType.ROOM_PUBLIC_CALL) || !currentUser.hasSpreedFeatureCapability("empty-group-room")) { - retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(currentUser.getBaseUrl(), + retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion, currentUser.getBaseUrl(), "3", invite, conversationName); } else { String roomType = "2"; @@ -294,7 +294,7 @@ public class OperationsMenuController extends BaseController { roomType = "3"; } - retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(currentUser.getBaseUrl(), + retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion, currentUser.getBaseUrl(), roomType, invite, conversationName); } @@ -405,7 +405,7 @@ public class OperationsMenuController extends BaseController { Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); - if(apiVersion == null) { + if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; } @@ -558,6 +558,7 @@ public class OperationsMenuController extends BaseController { }); } + @SuppressLint("LongLogTag") private void inviteUsersToAConversation() { RetrofitBucket retrofitBucket; final ArrayList localInvitedUsers = invitedUsers; @@ -566,11 +567,20 @@ public class OperationsMenuController extends BaseController { localInvitedGroups.remove(0); } + Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + if (localInvitedUsers.size() > 0 || (localInvitedGroups.size() > 0 && currentUser.hasSpreedFeatureCapability("invite-groups-and-mails"))) { if ((localInvitedGroups.size() > 0 && currentUser.hasSpreedFeatureCapability("invite-groups-and-mails"))) { for (int i = 0; i < localInvitedGroups.size(); i++) { final String groupId = localInvitedGroups.get(i); - retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(currentUser.getBaseUrl(), conversation.getToken(), + retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(apiVersion, + currentUser.getBaseUrl(), + conversation.getToken(), groupId); ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) @@ -610,8 +620,10 @@ public class OperationsMenuController extends BaseController { for (int i = 0; i < localInvitedUsers.size(); i++) { final String userId = invitedUsers.get(i); - retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(currentUser.getBaseUrl(), conversation.getToken(), - userId); + retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(apiVersion, + currentUser.getBaseUrl(), + conversation.getToken(), + userId); ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java index cb2d8cb4d..5ad49209c 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java @@ -20,7 +20,9 @@ package com.nextcloud.talk.jobs; +import android.annotation.SuppressLint; import android.content.Context; +import android.util.Log; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -46,6 +48,8 @@ import io.reactivex.schedulers.Schedulers; @AutoInjector(NextcloudTalkApplication.class) public class AddParticipantsToConversation extends Worker { + private static final String TAG = "AddParticipantsToConversation"; + @Inject NcApi ncApi; @@ -60,19 +64,29 @@ public class AddParticipantsToConversation extends Worker { NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); } + @SuppressLint("LongLogTag") @NonNull @Override public Result doWork() { + UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1)); + + Integer apiVersion = ApiUtils.getApiVersion(user, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return Result.failure(); + } + Data data = getInputData(); String[] selectedUserIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS()); String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS()); - UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1)); String conversationToken = data.getString(BundleKeys.INSTANCE.getKEY_TOKEN()); String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken()); RetrofitBucket retrofitBucket; for (String userId : selectedUserIds) { - retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(user.getBaseUrl(), conversationToken, + retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(apiVersion, user.getBaseUrl(), + conversationToken, userId); ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) @@ -81,7 +95,7 @@ public class AddParticipantsToConversation extends Worker { } for (String groupId : selectedGroupIds) { - retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(user.getBaseUrl(), conversationToken, + retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(apiVersion, user.getBaseUrl(), conversationToken, groupId); ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java index fd58d329b..69807d46d 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java @@ -90,7 +90,7 @@ public class LeaveConversationWorker extends Worker { Integer apiVersion = ApiUtils.getApiVersion(operationUser, "conversation", new int[] {1}); - if(apiVersion == null) { + if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return Result.failure(); } 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 86701f3d6..efc9ad8ea 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -29,10 +29,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.RetrofitBucket; import com.nextcloud.talk.models.database.UserEntity; -import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; import androidx.annotation.DimenRes; @@ -41,18 +38,18 @@ import okhttp3.Credentials; public class ApiUtils { private static final String TAG = "ApiUtils"; - private static String ocsApiVersion = "/ocs/v2.php"; - private static String spreedApiVersion = "/apps/spreed/api/v1"; - private static String spreedApiBase = ocsApiVersion + "/apps/spreed/api/v"; + private static final String ocsApiVersion = "/ocs/v2.php"; + private static final String spreedApiVersion = "/apps/spreed/api/v1"; + private static final String spreedApiBase = ocsApiVersion + "/apps/spreed/api/v"; - private static String userAgent = "Mozilla/5.0 (Android) Nextcloud-Talk v"; + private static final String userAgent = "Mozilla/5.0 (Android) Nextcloud-Talk v"; public static String getUserAgent() { return userAgent + BuildConfig.VERSION_NAME; } /** - * @deprecated Please specify the api version you want to use via + * @deprecated This is only supported on API v1-3, in API v4+ please use * {@link ApiUtils#getUrlForAttendees(int, String, String)} instead. */ @Deprecated @@ -108,28 +105,10 @@ public class ApiUtils { return retrofitBucket; } - /** - * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForParticipantsActive(int, String, String)} instead. - */ - @Deprecated - public static String getUrlForSettingMyselfAsActiveParticipant(String baseUrl, String token) { - return getUrlForParticipantsActive(1, baseUrl, token); - } - public static String getUrlForCapabilities(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/capabilities"; } - /** - * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForRooms(int, String)} instead. - */ - @Deprecated - public static String getUrlForGetRooms(String baseUrl) { - return getUrlForRooms(1, baseUrl); - } - public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { if (apiName.equals("conversation")) { boolean hasApiV4 = false; @@ -217,12 +196,11 @@ public class ApiUtils { return getUrlForRoom(version, baseUrl, token) + "/webinary/lobby"; } - @Deprecated - public static RetrofitBucket getRetrofitBucketForCreateRoom(String baseUrl, String roomType, + public static RetrofitBucket getRetrofitBucketForCreateRoom(int version, String baseUrl, String roomType, @Nullable String invite, @Nullable String conversationName) { RetrofitBucket retrofitBucket = new RetrofitBucket(); - retrofitBucket.setUrl(baseUrl + ocsApiVersion + spreedApiVersion + "/room"); + retrofitBucket.setUrl(getUrlForRooms(version, baseUrl)); Map queryMap = new HashMap<>(); queryMap.put("roomType", roomType); @@ -239,10 +217,9 @@ public class ApiUtils { return retrofitBucket; } - @Deprecated - public static RetrofitBucket getRetrofitBucketForAddParticipant(String baseUrl, String token, String user) { + public static RetrofitBucket getRetrofitBucketForAddParticipant(int version, String baseUrl, String token, String user) { RetrofitBucket retrofitBucket = new RetrofitBucket(); - retrofitBucket.setUrl(baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/participants"); + retrofitBucket.setUrl(getUrlForParticipants(version, baseUrl, token)); Map queryMap = new HashMap<>(); @@ -254,46 +231,46 @@ public class ApiUtils { } - public static RetrofitBucket getRetrofitBucketForAddGroupParticipant(String baseUrl, String token, String group) { - RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(baseUrl, token, group); + public static RetrofitBucket getRetrofitBucketForAddGroupParticipant(int version, String baseUrl, String token, String group) { + RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(version, baseUrl, token, group); retrofitBucket.getQueryMap().put("source", "groups"); return retrofitBucket; } - public static RetrofitBucket getRetrofitBucketForAddMailParticipant(String baseUrl, String token, String mail) { - RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(baseUrl, token, mail); + public static RetrofitBucket getRetrofitBucketForAddMailParticipant(int version, String baseUrl, String token, String mail) { + RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(version, baseUrl, token, mail); retrofitBucket.getQueryMap().put("source", "emails"); return retrofitBucket; } - @Deprecated public static String getUrlForCall(String baseUrl, String token) { - // FIXME user APIv4 + // FIXME Introduce API version return baseUrl + ocsApiVersion + spreedApiVersion + "/call/" + token; } - @Deprecated public static String getUrlForCallPing(String baseUrl, String token) { + // FIXME Introduce API version return getUrlForCall(baseUrl, token) + "/ping"; } public static String getUrlForChat(String baseUrl, String token) { + // FIXME Introduce API version return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token; } - @Deprecated public static String getUrlForExternalServerAuthBackend(String baseUrl) { + // FIXME Introduce API version return getUrlForSignaling(baseUrl, null) + "/backend"; } public static String getUrlForMentionSuggestions(String baseUrl, String token) { + // FIXME Introduce API version return getUrlForChat(baseUrl, token) + "/mentions"; } - @Deprecated public static String getUrlForSignaling(String baseUrl, @Nullable String token) { - // FIXME use APIv2 ? + // FIXME Introduce API version String signalingUrl = baseUrl + ocsApiVersion + spreedApiVersion + "/signaling"; if (token == null) { return signalingUrl; @@ -302,17 +279,8 @@ public class ApiUtils { } } - /** - * @deprecated Please specify the api version you want to use via - * {@link ApiUtils#getUrlForRoomModerators(int, String, String)} instead. - */ - @Deprecated - public static String getUrlForModerators(String baseUrl, String roomToken) { - return getUrlForRoomModerators(1, baseUrl, roomToken); - } - - @Deprecated public static String getUrlForSignalingSettings(String baseUrl) { + // FIXME Introduce API version return getUrlForSignaling(baseUrl, null) + "/settings"; } @@ -326,6 +294,7 @@ public class ApiUtils { } public static String getUrlForUserSettings(String baseUrl) { + // FIXME Introduce API version return baseUrl + ocsApiVersion + spreedApiVersion + "/settings/user"; } From f0eb3fec3716f7e8717635d6dc60816527790492 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 06:19:14 +0200 Subject: [PATCH 11/23] Inject api version in call api Signed-off-by: Joas Schilling --- .../firebase/MagicFirebaseMessagingService.kt | 15 ++++++++++ .../talk/controllers/CallController.java | 28 ++++++++++++++++--- .../CallNotificationController.java | 10 ++++++- .../com/nextcloud/talk/utils/ApiUtils.java | 17 +++++------ 4 files changed, 57 insertions(+), 13 deletions(-) diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index f966235f5..509f1026d 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -302,9 +302,18 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { var hasParticipantsInCall = false var inCallOnDifferentDevice = false + + val apiVersion = ApiUtils.getApiVersion(signatureVerification.userEntity, "conversation", intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi.getPeersForCall( ApiUtils.getCredentials(signatureVerification.userEntity.username, signatureVerification.userEntity.token), ApiUtils.getUrlForCall( + apiVersion, signatureVerification.userEntity.baseUrl, decryptedPushMessage.id ) @@ -347,4 +356,10 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { } }) } + + companion object { + + private val TAG = "MagicFirebaseMessagingService" + private const val ID_DELETE_CONVERSATION_DIALOG = 0 + } } 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 80365056d..d49aa96e0 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -1302,8 +1302,14 @@ public class CallController extends BaseController { inCallFlag = (int) Participant.ParticipantFlags.IN_CALL_WITH_AUDIO_AND_VIDEO.getValue(); } - ncApi.joinCall(credentials, - ApiUtils.getUrlForCall(baseUrl, roomToken), inCallFlag) + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.joinCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken), inCallFlag) .subscribeOn(Schedulers.io()) .retry(3) .observeOn(AndroidSchedulers.mainThread()) @@ -1627,7 +1633,14 @@ public class CallController extends BaseController { } private void hangupNetworkCalls(boolean shutDownView) { - ncApi.leaveCall(credentials, ApiUtils.getUrlForCall(baseUrl, roomToken)) + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.leaveCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -1762,7 +1775,14 @@ public class CallController extends BaseController { private void getPeersForCall() { Log.d(TAG, "getPeersForCall"); - ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(baseUrl, roomToken)) + Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken)) .subscribeOn(Schedulers.io()) .subscribe(new Observer() { @Override 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 ba9c40287..2b4fec14d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -208,8 +208,16 @@ public class CallNotificationController extends BaseController { .pushChangeHandler(new HorizontalChangeHandler())); } + @SuppressLint("LongLogTag") private void checkIfAnyParticipantsRemainInRoom() { - ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(userBeingCalled.getBaseUrl(), + Integer apiVersion = ApiUtils.getApiVersion(userBeingCalled, "conversation", new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(apiVersion, userBeingCalled.getBaseUrl(), currentConversation.getToken())) .subscribeOn(Schedulers.io()) .takeWhile(observable -> !leavingScreen) 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 efc9ad8ea..6e45d34b1 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -196,6 +196,10 @@ public class ApiUtils { return getUrlForRoom(version, baseUrl, token) + "/webinary/lobby"; } + public static String getUrlForCall(int version, String baseUrl, String token) { + return getUrlForApi(version, baseUrl) + "/call/" + token; + } + public static RetrofitBucket getRetrofitBucketForCreateRoom(int version, String baseUrl, String roomType, @Nullable String invite, @Nullable String conversationName) { @@ -243,15 +247,12 @@ public class ApiUtils { return retrofitBucket; } - public static String getUrlForCall(String baseUrl, String token) { - // FIXME Introduce API version - return baseUrl + ocsApiVersion + spreedApiVersion + "/call/" + token; - - } - + /** + * @deprecated Method is only needed before Talk 4 which is from 2018 => todrop + */ + @Deprecated public static String getUrlForCallPing(String baseUrl, String token) { - // FIXME Introduce API version - return getUrlForCall(baseUrl, token) + "/ping"; + return getUrlForCall(1, baseUrl, token) + "/ping"; } public static String getUrlForChat(String baseUrl, String token) { From cf23a3d87d78e5ca110129a41d6ada53f0ccce7a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 06:44:06 +0200 Subject: [PATCH 12/23] Inject API version into signaling API calls Signed-off-by: Joas Schilling --- .../talk/controllers/CallController.java | 28 ++++++++-- .../talk/jobs/SignalingSettingsWorker.java | 10 +++- .../com/nextcloud/talk/utils/ApiUtils.java | 51 +++++++++++-------- .../webrtc/WebSocketConnectionHelper.java | 15 +++++- 4 files changed, 78 insertions(+), 26 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 d49aa96e0..36459494f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -1104,7 +1104,14 @@ public class CallController extends BaseController { } private void fetchSignalingSettings() { - ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(baseUrl)) + Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(apiVersion, baseUrl)) .subscribeOn(Schedulers.io()) .retry(3) .observeOn(AndroidSchedulers.mainThread()) @@ -1369,7 +1376,15 @@ public class CallController extends BaseController { } if (!hasExternalSignalingServer) { - ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(baseUrl, urlToken)) + Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, + baseUrl, urlToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .repeatWhen(observable -> observable) @@ -2086,7 +2101,14 @@ public class CallController extends BaseController { urlToken = roomToken; } - ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(baseUrl, urlToken), + Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, urlToken), strings.toString()) .retry(3) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java index 7bf50c724..a4a1be146 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java @@ -81,8 +81,16 @@ public class SignalingSettingsWorker extends Worker { for (int i = 0; i < userEntityList.size(); i++) { userEntity = userEntityList.get(i); UserEntity finalUserEntity = userEntity; + + Integer apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + continue; + } + ncApi.getSignalingSettings(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()), - ApiUtils.getUrlForSignalingSettings(userEntity.getBaseUrl())) + ApiUtils.getUrlForSignalingSettings(apiVersion, userEntity.getBaseUrl())) .blockingSubscribe(new Observer() { @Override public void onSubscribe(Disposable d) { 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 6e45d34b1..5846b7fd7 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -140,6 +140,20 @@ public class ApiUtils { return null; } + public static Integer getSignalingApiVersion(UserEntity capabilities, int[] versions) { + for (int version : versions) { + if (version == 2 && capabilities.hasSpreedFeatureCapability("sip-support")) { + return version; + } + + if (version == 1) { + // Has no capability, we just assume it is always there for now. + return version; + } + } + return null; + } + protected static String getUrlForApi(int version, String baseUrl) { return baseUrl + spreedApiBase + version; } @@ -200,6 +214,22 @@ public class ApiUtils { return getUrlForApi(version, baseUrl) + "/call/" + token; } + public static String getUrlForSignaling(int version, String baseUrl) { + return getUrlForApi(version, baseUrl) + "/signaling"; + } + + public static String getUrlForSignalingBackend(int version, String baseUrl) { + return getUrlForSignaling(version, baseUrl) + "/backend"; + } + + public static String getUrlForSignalingSettings(int version, String baseUrl) { + return getUrlForSignaling(version, baseUrl) + "/settings"; + } + + public static String getUrlForSignaling(int version, String baseUrl, String token) { + return getUrlForSignaling(version, baseUrl) + "/" + token; + } + public static RetrofitBucket getRetrofitBucketForCreateRoom(int version, String baseUrl, String roomType, @Nullable String invite, @Nullable String conversationName) { @@ -260,32 +290,11 @@ public class ApiUtils { return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token; } - public static String getUrlForExternalServerAuthBackend(String baseUrl) { - // FIXME Introduce API version - return getUrlForSignaling(baseUrl, null) + "/backend"; - } - public static String getUrlForMentionSuggestions(String baseUrl, String token) { // FIXME Introduce API version return getUrlForChat(baseUrl, token) + "/mentions"; } - public static String getUrlForSignaling(String baseUrl, @Nullable String token) { - // FIXME Introduce API version - String signalingUrl = baseUrl + ocsApiVersion + spreedApiVersion + "/signaling"; - if (token == null) { - return signalingUrl; - } else { - return signalingUrl + "/" + token; - } - } - - public static String getUrlForSignalingSettings(String baseUrl) { - // FIXME Introduce API version - return getUrlForSignaling(baseUrl, null) + "/settings"; - } - - public static String getUrlForUserProfile(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/user"; } diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index 40f8d0ee7..b26deab5e 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -20,6 +20,9 @@ package com.nextcloud.talk.webrtc; +import android.annotation.SuppressLint; +import android.util.Log; + import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.UserEntity; @@ -34,6 +37,8 @@ import java.util.Map; @AutoInjector(NextcloudTalkApplication.class) public class WebSocketConnectionHelper { + private static final String TAG = "WebSocketConnectionHelper"; + private static Map magicWebSocketInstanceMap = new HashMap<>(); @Inject @@ -87,13 +92,21 @@ public class WebSocketConnectionHelper { } } + @SuppressLint("LongLogTag") HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { + Integer apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return null; + } + HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); helloOverallWebSocketMessage.setType("hello"); HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage(); helloWebSocketMessage.setVersion("1.0"); AuthWebSocketMessage authWebSocketMessage = new AuthWebSocketMessage(); - authWebSocketMessage.setUrl(ApiUtils.getUrlForExternalServerAuthBackend(userEntity.getBaseUrl())); + authWebSocketMessage.setUrl(ApiUtils.getUrlForSignalingBackend(apiVersion, userEntity.getBaseUrl())); AuthParametersWebSocketMessage authParametersWebSocketMessage = new AuthParametersWebSocketMessage(); authParametersWebSocketMessage.setTicket(ticket); authParametersWebSocketMessage.setUserid(userEntity.getUserId()); From e6d869d431988ca725157797bfbd8540ac25874e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 07:13:04 +0200 Subject: [PATCH 13/23] Allow to inject the version into the chat api Signed-off-by: Joas Schilling --- .../talk/controllers/ChatController.kt | 35 ++++++++++++++++--- .../MentionAutocompletePresenter.java | 16 +++++++-- .../com/nextcloud/talk/utils/ApiUtils.java | 34 ++++++++++-------- 3 files changed, 65 insertions(+), 20 deletions(-) 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 df3f53d2b..40bcf9627 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -1142,9 +1142,16 @@ class ChatController(args: Bundle) : private fun sendMessage(message: CharSequence, replyTo: Int?) { if (conversationUser != null) { + val apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + ncApi!!.sendChatMessage( credentials, - ApiUtils.getUrlForChat(conversationUser.baseUrl, roomToken), + ApiUtils.getUrlForChat(apiVersion, conversationUser.baseUrl, roomToken), message, conversationUser.displayName, replyTo @@ -1244,11 +1251,23 @@ class ChatController(args: Bundle) : } if (!wasDetached) { + var apiVersion: Int? + // FIXME this is a best guess, guests would need to get the capabilities themselves + apiVersion = 1 + if (conversationUser != null) { + apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + return + } + } + if (lookIntoFuture > 0) { val finalTimeout = timeout ncApi?.pullChatMessages( credentials, - ApiUtils.getUrlForChat(conversationUser?.baseUrl, roomToken), fieldMap + ApiUtils.getUrlForChat(apiVersion, conversationUser?.baseUrl, roomToken), fieldMap ) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) @@ -1277,7 +1296,7 @@ class ChatController(args: Bundle) : } else { ncApi?.pullChatMessages( credentials, - ApiUtils.getUrlForChat(conversationUser?.baseUrl, roomToken), fieldMap + ApiUtils.getUrlForChat(apiVersion, conversationUser?.baseUrl, roomToken), fieldMap ) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) @@ -1667,9 +1686,17 @@ class ChatController(args: Bundle) : true } R.id.action_delete_message -> { + val apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found") + } + + ncApi?.deleteChatMessage( credentials, - ApiUtils.getUrlForMessageDeletion(conversationUser?.baseUrl, roomToken, message?.id) + ApiUtils.getUrlForChatMessage(apiVersion, conversationUser?.baseUrl, roomToken, + message?.id) )?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer { diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java index 22d18e705..1662d5d49 100644 --- a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java +++ b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java @@ -20,7 +20,9 @@ package com.nextcloud.talk.presenters; +import android.annotation.SuppressLint; import android.content.Context; +import android.util.Log; import android.view.View; import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; @@ -47,6 +49,7 @@ import java.util.List; @AutoInjector(NextcloudTalkApplication.class) public class MentionAutocompletePresenter extends RecyclerViewPresenter implements FlexibleAdapter.OnItemClickListener { + private static final String TAG = "MentionAutocompletePresenter"; @Inject NcApi ncApi; @Inject @@ -81,6 +84,7 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter return adapter; } + @SuppressLint("LongLogTag") @Override protected void onQuery(@Nullable CharSequence query) { @@ -91,9 +95,17 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter queryString = ""; } + Integer apiVersion = ApiUtils.getChatApiVersion(currentUser, new int[] {1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + adapter.setFilter(queryString); - ncApi.getMentionAutocompleteSuggestions(ApiUtils.getCredentials(currentUser.getUsername(), currentUser - .getToken()), ApiUtils.getUrlForMentionSuggestions(currentUser.getBaseUrl(), roomToken), + ncApi.getMentionAutocompleteSuggestions( + ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken()), + ApiUtils.getUrlForMentionSuggestions(apiVersion, currentUser.getBaseUrl(), roomToken), queryString, 5) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) 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 5846b7fd7..9ad27bcdd 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -154,6 +154,16 @@ public class ApiUtils { return null; } + public static Integer getChatApiVersion(UserEntity capabilities, int[] versions) { + for (int version : versions) { + if (version == 1 && capabilities.hasSpreedFeatureCapability("chat-v2")) { + // Do not question that chat-v2 capability shows the availability of api/v1/ endpoint *see no evil* + return version; + } + } + return null; + } + protected static String getUrlForApi(int version, String baseUrl) { return baseUrl + spreedApiBase + version; } @@ -213,6 +223,16 @@ public class ApiUtils { public static String getUrlForCall(int version, String baseUrl, String token) { return getUrlForApi(version, baseUrl) + "/call/" + token; } + public static String getUrlForChat(int version, String baseUrl, String token) { + return getUrlForApi(version, baseUrl) + "/chat/" + token; + } + + public static String getUrlForMentionSuggestions(int version, String baseUrl, String token) { + return getUrlForChat(version, baseUrl, token) + "/mentions"; + } + public static String getUrlForChatMessage(int version, String baseUrl, String token, String messageId) { + return getUrlForChat(version, baseUrl, token) + "/" + messageId; + } public static String getUrlForSignaling(int version, String baseUrl) { return getUrlForApi(version, baseUrl) + "/signaling"; @@ -285,16 +305,6 @@ public class ApiUtils { return getUrlForCall(1, baseUrl, token) + "/ping"; } - public static String getUrlForChat(String baseUrl, String token) { - // FIXME Introduce API version - return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token; - } - - public static String getUrlForMentionSuggestions(String baseUrl, String token) { - // FIXME Introduce API version - return getUrlForChat(baseUrl, token) + "/mentions"; - } - public static String getUrlForUserProfile(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/user"; } @@ -363,10 +373,6 @@ public class ApiUtils { return baseUrl + "/remote.php/dav/files/" + user + "/" + remotePath; } - public static String getUrlForMessageDeletion(String baseUrl, String token, String messageId) { - return getUrlForChat(baseUrl, token) + "/" + messageId; - } - public static String getUrlForTempAvatar(String baseUrl) { return baseUrl + ocsApiVersion + "/apps/spreed/temp-user-avatar"; } From 529541d8967df9e8eac8906a924d7f912af3adb0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 07:19:12 +0200 Subject: [PATCH 14/23] Change version to be specific to conversations api Signed-off-by: Joas Schilling --- .../firebase/MagicFirebaseMessagingService.kt | 2 +- .../nextcloud/talk/activities/MainActivity.kt | 4 +-- .../talk/controllers/CallController.java | 14 ++++------ .../CallNotificationController.java | 4 +-- .../talk/controllers/ChatController.kt | 10 +++---- .../talk/controllers/ContactsController.java | 7 ++--- .../controllers/ConversationInfoController.kt | 8 +++--- .../ConversationsListController.java | 2 +- .../bottomsheet/OperationsMenuController.java | 8 ++---- .../jobs/AddParticipantsToConversation.java | 2 +- .../talk/jobs/DeleteConversationWorker.java | 3 +- .../talk/jobs/LeaveConversationWorker.java | 3 +- .../talk/jobs/NotificationWorker.java | 3 +- .../com/nextcloud/talk/utils/ApiUtils.java | 28 +++++++++---------- .../DatabaseStorageModule.java | 2 +- 15 files changed, 45 insertions(+), 55 deletions(-) diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index 509f1026d..927b57af5 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -303,7 +303,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { var inCallOnDifferentDevice = false - val apiVersion = ApiUtils.getApiVersion(signatureVerification.userEntity, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(signatureVerification.userEntity, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index 4608b09c7..856b08f1d 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -231,7 +231,7 @@ class MainActivity : BaseActivity(), ActionBarProvider { val roomType = "1" val currentUser = userUtils.currentUser ?: return - val apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -258,7 +258,7 @@ class MainActivity : BaseActivity(), ActionBarProvider { bundle.putString(KEY_ROOM_TOKEN, roomOverall.ocs.data.token) bundle.putString(KEY_ROOM_ID, roomOverall.ocs.data.roomId) if (currentUser.hasSpreedFeatureCapability("chat-v2")) { - val apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") 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 36459494f..5695c98c0 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -441,7 +441,7 @@ public class CallController extends BaseController { } private void handleFromNotification() { - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -1248,8 +1248,7 @@ public class CallController extends BaseController { private void joinRoomAndCall() { callSession = ApplicationWideCurrentRoomHolder.getInstance().getSession(); - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; @@ -1309,7 +1308,7 @@ public class CallController extends BaseController { inCallFlag = (int) Participant.ParticipantFlags.IN_CALL_WITH_AUDIO_AND_VIDEO.getValue(); } - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -1648,7 +1647,7 @@ public class CallController extends BaseController { } private void hangupNetworkCalls(boolean shutDownView) { - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -1690,8 +1689,7 @@ public class CallController extends BaseController { } private void leaveRoom(boolean shutDownView) { - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; @@ -1790,7 +1788,7 @@ public class CallController extends BaseController { private void getPeersForCall() { Log.d(TAG, "getPeersForCall"); - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); 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 2b4fec14d..a53e35732 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -210,7 +210,7 @@ public class CallNotificationController extends BaseController { @SuppressLint("LongLogTag") private void checkIfAnyParticipantsRemainInRoom() { - Integer apiVersion = ApiUtils.getApiVersion(userBeingCalled, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -267,7 +267,7 @@ public class CallNotificationController extends BaseController { @SuppressLint("LongLogTag") private void handleFromNotification() { - Integer apiVersion = ApiUtils.getApiVersion(userBeingCalled, "conversation", new int[] {4, 3, 1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {4, 3, 1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; 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 40bcf9627..0ab0b50ff 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -294,7 +294,7 @@ class ChatController(args: Bundle) : } if (conversationUser != null) { - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -344,7 +344,7 @@ class ChatController(args: Bundle) : return } - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -977,7 +977,7 @@ class ChatController(args: Bundle) : if (currentConversation == null || TextUtils.isEmpty(currentConversation?.sessionId) || currentConversation?.sessionId == "0" ) { - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -1051,7 +1051,7 @@ class ChatController(args: Bundle) : } private fun leaveRoom() { - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -1806,7 +1806,7 @@ class ChatController(args: Bundle) : currentConversation?.name != userMentionClickEvent.userId ) { - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") 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 9026f0cd6..a0e9ec15f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -288,7 +288,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ userId = selectedUserIds.iterator().next(); } - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -318,8 +318,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), roomOverall.getOcs().getData().getToken()); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), roomOverall.getOcs().getData().getRoomId()); - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (apiVersion != null && currentUser.hasSpreedFeatureCapability("chat-v2")) { ncApi.getRoom(credentials, @@ -861,7 +860,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ roomType = "2"; } - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index 0de0eccdf..10c94eb53 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -310,7 +310,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA ).isChecked ) 1 else 0 - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -449,7 +449,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } private fun getListOfParticipants() { - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -545,7 +545,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } private fun fetchRoomInfo() { - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") @@ -726,7 +726,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA title(text = participant.displayName) listItemsWithImage(items = items) { dialog, index, _ -> - val apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", intArrayOf(1)) + val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) if (apiVersion == null) { Log.e(TAG, "No supported API version found") diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index 5eac81656..090382152 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -418,7 +418,7 @@ public class ConversationsListController extends BaseController implements Searc callItems = new ArrayList<>(); - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {4, 1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {4, 1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); return; diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index 9208daa88..9482d0f7d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -193,8 +193,7 @@ public class OperationsMenuController extends BaseController { credentials = null; } - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -402,8 +401,7 @@ public class OperationsMenuController extends BaseController { @SuppressLint("LongLogTag") private void performGroupCallWorkaround(String credentials) { - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); @@ -567,7 +565,7 @@ public class OperationsMenuController extends BaseController { localInvitedGroups.remove(0); } - Integer apiVersion = ApiUtils.getApiVersion(currentUser, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java index 5ad49209c..2902af4ed 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java @@ -70,7 +70,7 @@ public class AddParticipantsToConversation extends Worker { public Result doWork() { UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1)); - Integer apiVersion = ApiUtils.getApiVersion(user, "conversation", new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); diff --git a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java index 375aac09f..dccb8c1be 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java @@ -80,8 +80,7 @@ public class DeleteConversationWorker extends Worker { UserEntity operationUser = userUtils.getUserWithId(operationUserId); if (operationUser != null) { - Integer apiVersion = ApiUtils.getApiVersion(operationUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(operationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java index 69807d46d..8a6a72c8b 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java @@ -87,8 +87,7 @@ public class LeaveConversationWorker extends Worker { EventStatus eventStatus = new EventStatus(operationUser.getId(), EventStatus.EventType.CONVERSATION_UPDATE, true); - Integer apiVersion = ApiUtils.getApiVersion(operationUser, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(operationUser, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); 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 7fa941f83..7aec9e32c 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -152,8 +152,7 @@ public class NotificationWorker extends Worker { importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue()); } - Integer apiVersion = ApiUtils.getApiVersion(userEntity, "conversation", - new int[] {1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(userEntity, new int[] {1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); 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 9ad27bcdd..d8fd6f660 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -109,30 +109,28 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/cloud/capabilities"; } - public static Integer getApiVersion(UserEntity capabilities, String apiName, int[] versions) { - if (apiName.equals("conversation")) { - boolean hasApiV4 = false; - for (int version : versions) { - hasApiV4 |= version == 4; - } + public static Integer getConversationApiVersion(UserEntity capabilities, int[] versions) { + boolean hasApiV4 = false; + for (int version : versions) { + hasApiV4 |= version == 4; + } - if (!hasApiV4) { - Exception e = new Exception("Api call did not try conversation-v4 api"); - Log.d(TAG, e.getMessage(), e); - } - } + if (!hasApiV4) { + Exception e = new Exception("Api call did not try conversation-v4 api"); + Log.d(TAG, e.getMessage(), e); + } for (int version : versions) { - if (capabilities.hasSpreedFeatureCapability(apiName + "-v" + version)) { + if (capabilities.hasSpreedFeatureCapability("conversation-v" + version)) { return version; } // Fallback for old API versions - if (apiName.equals("conversation") && (version == 1 || version == 2)) { - if (capabilities.hasSpreedFeatureCapability(apiName + "-v2")) { + if ((version == 1 || version == 2)) { + if (capabilities.hasSpreedFeatureCapability("conversation-v2")) { return version; } - if (version == 1 && capabilities.hasSpreedFeatureCapability(apiName)) { + if (version == 1 && capabilities.hasSpreedFeatureCapability("conversation")) { return version; } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java index 10853d5d1..65fa295a8 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java @@ -97,7 +97,7 @@ public class DatabaseStorageModule implements StorageModule { intValue = 0; } - Integer apiVersion = ApiUtils.getApiVersion(conversationUser, "conversation", new int[] {4, 1}); + Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {4, 1}); if (apiVersion == null) { Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); } From bc641e2d07186b3ec76baf248069603902e5dfd7 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 07:28:37 +0200 Subject: [PATCH 15/23] Fix Code style Signed-off-by: Joas Schilling --- .../firebase/MagicFirebaseMessagingService.kt | 1 - .../com/nextcloud/talk/activities/MainActivity.kt | 1 - .../nextcloud/talk/controllers/ChatController.kt | 1 - .../talk/controllers/ConversationInfoController.kt | 14 ++++++++++---- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index 927b57af5..08eba3724 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -302,7 +302,6 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { var hasParticipantsInCall = false var inCallOnDifferentDevice = false - val apiVersion = ApiUtils.getConversationApiVersion(signatureVerification.userEntity, intArrayOf(1)) if (apiVersion == null) { diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index 856b08f1d..afccdd979 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -49,7 +49,6 @@ import com.nextcloud.talk.R import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.controllers.CallNotificationController -import com.nextcloud.talk.controllers.ChatController import com.nextcloud.talk.controllers.ConversationsListController import com.nextcloud.talk.controllers.LockedController import com.nextcloud.talk.controllers.ServerSelectionController 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 0ab0b50ff..8dee9c60a 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -1692,7 +1692,6 @@ class ChatController(args: Bundle) : Log.e(TAG, "No supported API version found") } - ncApi?.deleteChatMessage( credentials, ApiUtils.getUrlForChatMessage(apiVersion, conversationUser?.baseUrl, roomToken, diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index 10c94eb53..f0dcbdbcc 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -736,8 +736,11 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA if (participant.type == Participant.ParticipantType.MODERATOR) { ncApi.demoteModeratorToUser( credentials, - ApiUtils.getUrlForRoomModerators(apiVersion, conversationUser.baseUrl, - conversation!!.token), + ApiUtils.getUrlForRoomModerators( + apiVersion, + conversationUser.baseUrl, + conversation!!.token + ), participant.userId ) .subscribeOn(Schedulers.io()) @@ -748,8 +751,11 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } else if (participant.type == Participant.ParticipantType.USER) { ncApi.promoteUserToModerator( credentials, - ApiUtils.getUrlForRoomModerators(apiVersion, conversationUser.baseUrl, - conversation!!.token), + ApiUtils.getUrlForRoomModerators( + apiVersion, + conversationUser.baseUrl, + conversation!!.token + ), participant.userId ) .subscribeOn(Schedulers.io()) From b5c1e623c584870182b76a922b3c6d43babeda13 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 08:03:37 +0200 Subject: [PATCH 16/23] Fix undefined symbol Signed-off-by: Joas Schilling --- .../nextcloud/talk/jobs/AddParticipantsToConversation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java index 2902af4ed..c65aa9bc5 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java @@ -68,6 +68,9 @@ public class AddParticipantsToConversation extends Worker { @NonNull @Override public Result doWork() { + Data data = getInputData(); + String[] selectedUserIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS()); + String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS()); UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1)); Integer apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {1}); @@ -77,9 +80,6 @@ public class AddParticipantsToConversation extends Worker { return Result.failure(); } - Data data = getInputData(); - String[] selectedUserIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS()); - String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS()); String conversationToken = data.getString(BundleKeys.INSTANCE.getKEY_TOKEN()); String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken()); From fb2fbf31527117796072448024645ee6195e6624 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 10:39:05 +0200 Subject: [PATCH 17/23] LongLogTag Signed-off-by: Joas Schilling --- .../talk/services/firebase/MagicFirebaseMessagingService.kt | 1 + .../nextcloud/talk/controllers/ConversationInfoController.kt | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index 08eba3724..428553e7a 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -292,6 +292,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { } } + @SuppressLint("LongLogTag") private fun checkIfCallIsActive( signatureVerification: SignatureVerification, decryptedPushMessage: DecryptedPushMessage diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index f0dcbdbcc..83518b3e1 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -448,6 +448,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } } + @SuppressLint("LongLogTag") private fun getListOfParticipants() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) @@ -544,6 +545,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA router.setBackstack(backstack, HorizontalChangeHandler()) } + @SuppressLint("LongLogTag") private fun fetchRoomInfo() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) @@ -695,6 +697,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } } + @SuppressLint("LongLogTag") override fun onItemClick(view: View?, position: Int): Boolean { val userItem = adapter?.getItem(position) as UserItem val participant = userItem.model From ee3dc43530de90f1045c3788a8b37780858e0216 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 14:05:00 +0200 Subject: [PATCH 18/23] Throw the exception up Signed-off-by: Joas Schilling --- .../firebase/MagicFirebaseMessagingService.kt | 5 -- .../nextcloud/talk/activities/MainActivity.kt | 13 ---- .../talk/controllers/CallController.java | 61 +++---------------- .../CallNotificationController.java | 13 +--- .../talk/controllers/ChatController.kt | 44 +------------ .../talk/controllers/ContactsController.java | 19 ++---- .../controllers/ConversationInfoController.kt | 19 ------ .../ConversationsListController.java | 7 +-- .../bottomsheet/OperationsMenuController.java | 21 +------ .../jobs/AddParticipantsToConversation.java | 7 +-- .../talk/jobs/DeleteConversationWorker.java | 7 +-- .../talk/jobs/LeaveConversationWorker.java | 7 +-- .../talk/jobs/NotificationWorker.java | 8 +-- .../talk/jobs/SignalingSettingsWorker.java | 7 +-- .../MentionAutocompletePresenter.java | 7 +-- .../com/nextcloud/talk/utils/ApiUtils.java | 12 ++-- .../talk/utils/NoSupportedApiException.kt | 3 + .../DatabaseStorageModule.java | 5 +- .../webrtc/WebSocketConnectionHelper.java | 7 +-- 19 files changed, 38 insertions(+), 234 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index 428553e7a..e77ab4ffb 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -305,11 +305,6 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { val apiVersion = ApiUtils.getConversationApiVersion(signatureVerification.userEntity, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi.getPeersForCall( ApiUtils.getCredentials(signatureVerification.userEntity.username, signatureVerification.userEntity.token), ApiUtils.getUrlForCall( diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index afccdd979..b0669d7b7 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -231,12 +231,6 @@ class MainActivity : BaseActivity(), ActionBarProvider { val currentUser = userUtils.currentUser ?: return val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(1)) - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - val credentials = ApiUtils.getCredentials(currentUser.username, currentUser.token) val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom( apiVersion, currentUser.baseUrl, roomType, @@ -257,13 +251,6 @@ class MainActivity : BaseActivity(), ActionBarProvider { bundle.putString(KEY_ROOM_TOKEN, roomOverall.ocs.data.token) bundle.putString(KEY_ROOM_ID, roomOverall.ocs.data.roomId) if (currentUser.hasSpreedFeatureCapability("chat-v2")) { - val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(1)) - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi.getRoom( credentials, ApiUtils.getUrlForRoom( 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 5695c98c0..7dc788631 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -441,12 +441,7 @@ public class CallController extends BaseController { } private void handleFromNotification() { - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, baseUrl)) .retry(3) @@ -1104,12 +1099,7 @@ public class CallController extends BaseController { } private void fetchSignalingSettings() { - Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(apiVersion, baseUrl)) .subscribeOn(Schedulers.io()) @@ -1248,11 +1238,7 @@ public class CallController extends BaseController { private void joinRoomAndCall() { callSession = ApplicationWideCurrentRoomHolder.getInstance().getSession(); - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); if (TextUtils.isEmpty(callSession)) { ncApi.joinRoom(credentials, ApiUtils.getUrlForParticipantsActive(apiVersion, baseUrl, roomToken), @@ -1308,12 +1294,7 @@ public class CallController extends BaseController { inCallFlag = (int) Participant.ParticipantFlags.IN_CALL_WITH_AUDIO_AND_VIDEO.getValue(); } - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); ncApi.joinCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken), inCallFlag) .subscribeOn(Schedulers.io()) @@ -1375,12 +1356,7 @@ public class CallController extends BaseController { } if (!hasExternalSignalingServer) { - Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, urlToken)) @@ -1647,12 +1623,7 @@ public class CallController extends BaseController { } private void hangupNetworkCalls(boolean shutDownView) { - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); ncApi.leaveCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken)) .subscribeOn(Schedulers.io()) @@ -1689,11 +1660,7 @@ public class CallController extends BaseController { } private void leaveRoom(boolean shutDownView) { - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); ncApi.leaveRoom(credentials, ApiUtils.getUrlForParticipantsActive(apiVersion, baseUrl, roomToken)) .subscribeOn(Schedulers.io()) @@ -1788,12 +1755,7 @@ public class CallController extends BaseController { private void getPeersForCall() { Log.d(TAG, "getPeersForCall"); - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {1}); ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken)) .subscribeOn(Schedulers.io()) @@ -2099,12 +2061,7 @@ public class CallController extends BaseController { urlToken = roomToken; } - Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, urlToken), strings.toString()) 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 a53e35732..f537c8531 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -210,12 +210,7 @@ public class CallNotificationController extends BaseController { @SuppressLint("LongLogTag") private void checkIfAnyParticipantsRemainInRoom() { - Integer apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {1}); ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(apiVersion, userBeingCalled.getBaseUrl(), currentConversation.getToken())) @@ -267,11 +262,7 @@ public class CallNotificationController extends BaseController { @SuppressLint("LongLogTag") private void handleFromNotification() { - Integer apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {4, 3, 1}); - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {4, 3, 1}); ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, userBeingCalled.getBaseUrl(), roomId)) .subscribeOn(Schedulers.io()) 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 8dee9c60a..23ef78133 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -82,7 +82,6 @@ import com.facebook.imagepipeline.image.CloseableImage import com.google.android.flexbox.FlexboxLayout import com.nextcloud.talk.R import com.nextcloud.talk.activities.MagicCallActivity -import com.nextcloud.talk.activities.MainActivity import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder import com.nextcloud.talk.adapters.messages.MagicOutcomingTextMessageViewHolder import com.nextcloud.talk.adapters.messages.MagicPreviewMessageViewHolder @@ -116,6 +115,7 @@ import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.KeyboardUtils import com.nextcloud.talk.utils.MagicCharPolicy +import com.nextcloud.talk.utils.NoSupportedApiException import com.nextcloud.talk.utils.NotificationUtils import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.bundle.BundleKeys @@ -296,11 +296,6 @@ class ChatController(args: Bundle) : if (conversationUser != null) { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi?.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser.baseUrl, roomToken)) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) @@ -346,11 +341,6 @@ class ChatController(args: Bundle) : val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi?.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, conversationUser?.baseUrl)) ?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer { @@ -979,11 +969,6 @@ class ChatController(args: Bundle) : ) { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi?.joinRoom( credentials, ApiUtils.getUrlForParticipantsActive(apiVersion, conversationUser?.baseUrl, roomToken), @@ -1053,11 +1038,6 @@ class ChatController(args: Bundle) : private fun leaveRoom() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi?.leaveRoom( credentials, ApiUtils.getUrlForParticipantsActive( @@ -1144,11 +1124,6 @@ class ChatController(args: Bundle) : if (conversationUser != null) { val apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi!!.sendChatMessage( credentials, ApiUtils.getUrlForChat(apiVersion, conversationUser.baseUrl, roomToken), @@ -1251,16 +1226,11 @@ class ChatController(args: Bundle) : } if (!wasDetached) { - var apiVersion: Int? + var apiVersion: Int // FIXME this is a best guess, guests would need to get the capabilities themselves apiVersion = 1 if (conversationUser != null) { apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } } if (lookIntoFuture > 0) { @@ -1687,11 +1657,6 @@ class ChatController(args: Bundle) : } R.id.action_delete_message -> { val apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - } - ncApi?.deleteChatMessage( credentials, ApiUtils.getUrlForChatMessage(apiVersion, conversationUser?.baseUrl, roomToken, @@ -1807,11 +1772,6 @@ class ChatController(args: Bundle) : val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom( apiVersion, conversationUser?.baseUrl, "1", userMentionClickEvent.userId, null 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 a0e9ec15f..8cde43f6e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -288,13 +288,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ userId = selectedUserIds.iterator().next(); } - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } - + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion, currentUser.getBaseUrl(), roomType, @@ -318,8 +312,8 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), roomOverall.getOcs().getData().getToken()); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), roomOverall.getOcs().getData().getRoomId()); - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); - if (apiVersion != null && currentUser.hasSpreedFeatureCapability("chat-v2")) { + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); + if (currentUser.hasSpreedFeatureCapability("chat-v2")) { ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, currentUser.getBaseUrl(), @@ -860,12 +854,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ roomType = "2"; } - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return false; - } + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(apiVersion, currentUser.getBaseUrl(), diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index 83518b3e1..8ebe51416 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -312,11 +312,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi.setLobbyForConversation( ApiUtils.getCredentials(conversationUser!!.username, conversationUser.token), ApiUtils.getUrlForRoomWebinaryLobby(apiVersion, conversationUser.baseUrl, conversation!!.token), @@ -452,11 +447,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA private fun getListOfParticipants() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi.getPeersForCall( credentials, ApiUtils.getUrlForParticipants(apiVersion, conversationUser!!.baseUrl, conversationToken) @@ -549,11 +539,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA private fun fetchRoomInfo() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - return - } - ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser!!.baseUrl, conversationToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -731,10 +716,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) - if (apiVersion == null) { - Log.e(TAG, "No supported API version found") - } - if (index == 0) { if (participant.type == Participant.ParticipantType.MODERATOR) { ncApi.demoteModeratorToUser( diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index 090382152..0fff10672 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -418,12 +418,7 @@ public class ConversationsListController extends BaseController implements Searc callItems = new ArrayList<>(); - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {4, 1}); - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } - + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {4, 1}); roomsQueryDisposable = ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, currentUser.getBaseUrl())) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index 9482d0f7d..5c16c3e38 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -193,12 +193,7 @@ public class OperationsMenuController extends BaseController { credentials = null; } - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); switch (operationCode) { case 2: @@ -401,12 +396,7 @@ public class OperationsMenuController extends BaseController { @SuppressLint("LongLogTag") private void performGroupCallWorkaround(String credentials) { - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(), conversation.getToken())) @@ -565,12 +555,7 @@ public class OperationsMenuController extends BaseController { localInvitedGroups.remove(0); } - Integer apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (localInvitedUsers.size() > 0 || (localInvitedGroups.size() > 0 && currentUser.hasSpreedFeatureCapability("invite-groups-and-mails"))) { if ((localInvitedGroups.size() > 0 && currentUser.hasSpreedFeatureCapability("invite-groups-and-mails"))) { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java index c65aa9bc5..09039daa3 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java @@ -73,12 +73,7 @@ public class AddParticipantsToConversation extends Worker { String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS()); UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1)); - Integer apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return Result.failure(); - } + int apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {1}); String conversationToken = data.getString(BundleKeys.INSTANCE.getKEY_TOKEN()); String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken()); diff --git a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java index dccb8c1be..2b94215b1 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java @@ -80,12 +80,7 @@ public class DeleteConversationWorker extends Worker { UserEntity operationUser = userUtils.getUserWithId(operationUserId); if (operationUser != null) { - Integer apiVersion = ApiUtils.getConversationApiVersion(operationUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return Result.failure(); - } + int apiVersion = ApiUtils.getConversationApiVersion(operationUser, new int[] {1}); String credentials = ApiUtils.getCredentials(operationUser.getUsername(), operationUser.getToken()); ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java index 8a6a72c8b..b2d52ea33 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java @@ -87,12 +87,7 @@ public class LeaveConversationWorker extends Worker { EventStatus eventStatus = new EventStatus(operationUser.getId(), EventStatus.EventType.CONVERSATION_UPDATE, true); - Integer apiVersion = ApiUtils.getConversationApiVersion(operationUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return Result.failure(); - } + int apiVersion = ApiUtils.getConversationApiVersion(operationUser, new int[] {1}); ncApi.removeSelfFromRoom(credentials, ApiUtils.getUrlForParticipantsSelf(apiVersion, operationUser.getBaseUrl(), 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 7aec9e32c..ad5f09d2e 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -152,13 +152,7 @@ public class NotificationWorker extends Worker { importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue()); } - Integer apiVersion = ApiUtils.getConversationApiVersion(userEntity, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } - + int apiVersion = ApiUtils.getConversationApiVersion(userEntity, new int[] {1}); ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, userEntity.getBaseUrl(), intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java index a4a1be146..7d640dbc1 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java @@ -82,12 +82,7 @@ public class SignalingSettingsWorker extends Worker { userEntity = userEntityList.get(i); UserEntity finalUserEntity = userEntity; - Integer apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {2, 1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - continue; - } + int apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {2, 1}); ncApi.getSignalingSettings(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()), ApiUtils.getUrlForSignalingSettings(apiVersion, userEntity.getBaseUrl())) diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java index 1662d5d49..501fbedba 100644 --- a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java +++ b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java @@ -95,12 +95,7 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter queryString = ""; } - Integer apiVersion = ApiUtils.getChatApiVersion(currentUser, new int[] {1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return; - } + int apiVersion = ApiUtils.getChatApiVersion(currentUser, new int[] {1}); adapter.setFilter(queryString); ncApi.getMentionAutocompleteSuggestions( 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 d8fd6f660..40a50f07e 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -109,7 +109,7 @@ public class ApiUtils { return baseUrl + ocsApiVersion + "/cloud/capabilities"; } - public static Integer getConversationApiVersion(UserEntity capabilities, int[] versions) { + public static int getConversationApiVersion(UserEntity capabilities, int[] versions) throws NoSupportedApiException { boolean hasApiV4 = false; for (int version : versions) { hasApiV4 |= version == 4; @@ -135,10 +135,10 @@ public class ApiUtils { } } } - return null; + throw new NoSupportedApiException(); } - public static Integer getSignalingApiVersion(UserEntity capabilities, int[] versions) { + public static int getSignalingApiVersion(UserEntity capabilities, int[] versions) throws NoSupportedApiException { for (int version : versions) { if (version == 2 && capabilities.hasSpreedFeatureCapability("sip-support")) { return version; @@ -149,17 +149,17 @@ public class ApiUtils { return version; } } - return null; + throw new NoSupportedApiException(); } - public static Integer getChatApiVersion(UserEntity capabilities, int[] versions) { + public static int getChatApiVersion(UserEntity capabilities, int[] versions) throws NoSupportedApiException { for (int version : versions) { if (version == 1 && capabilities.hasSpreedFeatureCapability("chat-v2")) { // Do not question that chat-v2 capability shows the availability of api/v1/ endpoint *see no evil* return version; } } - return null; + throw new NoSupportedApiException(); } protected static String getUrlForApi(int version, String baseUrl) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt b/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt new file mode 100644 index 000000000..53cdd2076 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt @@ -0,0 +1,3 @@ +package com.nextcloud.talk.utils + +class NoSupportedApiException : RuntimeException("No supported API version found") \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java index 65fa295a8..a1847836c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java @@ -97,10 +97,7 @@ public class DatabaseStorageModule implements StorageModule { intValue = 0; } - Integer apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {4, 1}); - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - } + int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {4, 1}); ncApi.setNotificationLevel(ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()), ApiUtils.getUrlForRoomNotificationLevel(apiVersion, conversationUser.getBaseUrl(), diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index b26deab5e..e35c6f267 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -94,12 +94,7 @@ public class WebSocketConnectionHelper { @SuppressLint("LongLogTag") HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { - Integer apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {2, 1}); - - if (apiVersion == null) { - Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); - return null; - } + int apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {2, 1}); HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); helloOverallWebSocketMessage.setType("hello"); From 5d366d0dbfdc903102428e5a3262bfb69fd76b76 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 14:26:34 +0200 Subject: [PATCH 19/23] Fix coding styles Signed-off-by: Joas Schilling --- .../firebase/MagicFirebaseMessagingService.kt | 7 ------ .../nextcloud/talk/activities/MainActivity.kt | 1 - .../CallNotificationController.java | 2 -- .../talk/controllers/ChatController.kt | 5 ----- .../controllers/ConversationInfoController.kt | 7 ------ .../ConversationsListController.java | 3 --- .../bottomsheet/OperationsMenuController.java | 7 ------ .../jobs/AddParticipantsToConversation.java | 7 ------ .../talk/jobs/DeleteConversationWorker.java | 5 ----- .../talk/jobs/LeaveConversationWorker.java | 4 ---- .../MentionAutocompletePresenter.java | 4 ---- .../talk/utils/NoSupportedApiException.kt | 22 ++++++++++++++++++- .../DatabaseStorageModule.java | 4 ---- .../webrtc/WebSocketConnectionHelper.java | 6 ----- 14 files changed, 21 insertions(+), 63 deletions(-) diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index e77ab4ffb..319565de7 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -292,7 +292,6 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { } } - @SuppressLint("LongLogTag") private fun checkIfCallIsActive( signatureVerification: SignatureVerification, decryptedPushMessage: DecryptedPushMessage @@ -351,10 +350,4 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { } }) } - - companion object { - - private val TAG = "MagicFirebaseMessagingService" - private const val ID_DELETE_CONVERSATION_DIALOG = 0 - } } diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index b0669d7b7..486253ec9 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -28,7 +28,6 @@ import android.os.Bundle import android.os.Handler import android.provider.ContactsContract import android.text.TextUtils -import android.util.Log import android.view.ViewGroup import androidx.annotation.RequiresApi import autodagger.AutoInjector 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 f537c8531..b225c12d8 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -208,7 +208,6 @@ public class CallNotificationController extends BaseController { .pushChangeHandler(new HorizontalChangeHandler())); } - @SuppressLint("LongLogTag") private void checkIfAnyParticipantsRemainInRoom() { int apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {1}); @@ -260,7 +259,6 @@ public class CallNotificationController extends BaseController { } - @SuppressLint("LongLogTag") private void handleFromNotification() { int apiVersion = ApiUtils.getConversationApiVersion(userBeingCalled, new int[] {4, 3, 1}); 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 23ef78133..5c65fe353 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -115,7 +115,6 @@ import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.KeyboardUtils import com.nextcloud.talk.utils.MagicCharPolicy -import com.nextcloud.talk.utils.NoSupportedApiException import com.nextcloud.talk.utils.NotificationUtils import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.bundle.BundleKeys @@ -335,10 +334,6 @@ class ChatController(args: Bundle) : } private fun handleFromNotification() { - if (ncApi == null) { - return - } - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) ncApi?.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, conversationUser?.baseUrl)) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index 8ebe51416..ab8dde0e5 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -20,13 +20,11 @@ package com.nextcloud.talk.controllers -import android.annotation.SuppressLint import android.content.Context import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Bundle import android.text.TextUtils -import android.util.Log import android.view.LayoutInflater import android.view.MenuItem import android.view.View @@ -300,7 +298,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } } - @SuppressLint("LongLogTag") fun submitLobbyChanges() { val state = if ( ( @@ -443,7 +440,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } } - @SuppressLint("LongLogTag") private fun getListOfParticipants() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) @@ -535,7 +531,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA router.setBackstack(backstack, HorizontalChangeHandler()) } - @SuppressLint("LongLogTag") private fun fetchRoomInfo() { val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) @@ -682,7 +677,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } } - @SuppressLint("LongLogTag") override fun onItemClick(view: View?, position: Int): Boolean { val userItem = adapter?.getItem(position) as UserItem val participant = userItem.model @@ -794,7 +788,6 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA companion object { - private val TAG = "ConversationInfoController" private const val ID_DELETE_CONVERSATION_DIALOG = 0 } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index 0fff10672..cbd437428 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -23,7 +23,6 @@ package com.nextcloud.talk.controllers; import android.animation.AnimatorInflater; -import android.annotation.SuppressLint; import android.app.SearchManager; import android.content.Context; import android.content.Intent; @@ -33,7 +32,6 @@ import android.os.Bundle; import android.os.Handler; import android.text.InputType; import android.text.TextUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -410,7 +408,6 @@ public class ConversationsListController extends BaseController implements Searc searchItem.expandActionView(); } - @SuppressLint("LongLogTag") private void fetchData(boolean fromBottomSheet) { dispose(null); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index 5c16c3e38..4b1f61976 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -20,7 +20,6 @@ package com.nextcloud.talk.controllers.bottomsheet; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.net.Uri; @@ -83,8 +82,6 @@ import retrofit2.HttpException; @AutoInjector(NextcloudTalkApplication.class) public class OperationsMenuController extends BaseController { - private static final String TAG = "OperationsMenuController"; - @BindView(R.id.progress_bar) ProgressBar progressBar; @@ -172,7 +169,6 @@ public class OperationsMenuController extends BaseController { processOperation(); } - @SuppressLint("LongLogTag") private void processOperation() { currentUser = userUtils.getCurrentUser(); OperationsObserver operationsObserver = new OperationsObserver(); @@ -393,9 +389,7 @@ public class OperationsMenuController extends BaseController { } } - @SuppressLint("LongLogTag") private void performGroupCallWorkaround(String credentials) { - int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(), @@ -546,7 +540,6 @@ public class OperationsMenuController extends BaseController { }); } - @SuppressLint("LongLogTag") private void inviteUsersToAConversation() { RetrofitBucket retrofitBucket; final ArrayList localInvitedUsers = invitedUsers; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java index 09039daa3..cf0b6846e 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java @@ -20,9 +20,7 @@ package com.nextcloud.talk.jobs; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -35,8 +33,6 @@ import com.nextcloud.talk.utils.database.user.UserUtils; import org.greenrobot.eventbus.EventBus; -import java.util.ArrayList; - import javax.inject.Inject; import androidx.annotation.NonNull; @@ -48,8 +44,6 @@ import io.reactivex.schedulers.Schedulers; @AutoInjector(NextcloudTalkApplication.class) public class AddParticipantsToConversation extends Worker { - private static final String TAG = "AddParticipantsToConversation"; - @Inject NcApi ncApi; @@ -64,7 +58,6 @@ public class AddParticipantsToConversation extends Worker { NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); } - @SuppressLint("LongLogTag") @NonNull @Override public Result doWork() { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java index 2b94215b1..b22e1adfd 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/DeleteConversationWorker.java @@ -20,10 +20,7 @@ package com.nextcloud.talk.jobs; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; - import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.Worker; @@ -50,7 +47,6 @@ import java.net.CookieManager; @AutoInjector(NextcloudTalkApplication.class) public class DeleteConversationWorker extends Worker { - private static final String TAG = "DeleteConversationWorker"; @Inject Retrofit retrofit; @@ -70,7 +66,6 @@ public class DeleteConversationWorker extends Worker { NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); } - @SuppressLint("LongLogTag") @NonNull @Override public Result doWork() { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java index b2d52ea33..3704b5d2f 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java @@ -21,8 +21,6 @@ package com.nextcloud.talk.jobs; import android.content.Context; -import android.util.Log; - import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.Worker; @@ -50,8 +48,6 @@ import java.net.CookieManager; @AutoInjector(NextcloudTalkApplication.class) public class LeaveConversationWorker extends Worker { - private static final String TAG = "LeaveConversationWorker"; - @Inject Retrofit retrofit; diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java index 501fbedba..c998feaf3 100644 --- a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java +++ b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java @@ -20,9 +20,7 @@ package com.nextcloud.talk.presenters; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; import android.view.View; import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; @@ -49,7 +47,6 @@ import java.util.List; @AutoInjector(NextcloudTalkApplication.class) public class MentionAutocompletePresenter extends RecyclerViewPresenter implements FlexibleAdapter.OnItemClickListener { - private static final String TAG = "MentionAutocompletePresenter"; @Inject NcApi ncApi; @Inject @@ -84,7 +81,6 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter return adapter; } - @SuppressLint("LongLogTag") @Override protected void onQuery(@Nullable CharSequence query) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt b/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt index 53cdd2076..450963486 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/NoSupportedApiException.kt @@ -1,3 +1,23 @@ +/* + * Nextcloud Talk application + * + * @author Joas Schilling + * Copyright (C) 2021 Joas Schilling + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.nextcloud.talk.utils -class NoSupportedApiException : RuntimeException("No supported API version found") \ No newline at end of file +class NoSupportedApiException : RuntimeException("No supported API version found") diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java index a1847836c..b0b5b3cc2 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java @@ -22,8 +22,6 @@ package com.nextcloud.talk.utils.preferences.preferencestorage; import android.os.Bundle; import android.text.TextUtils; -import android.util.Log; - import autodagger.AutoInjector; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -42,8 +40,6 @@ import java.util.Set; @AutoInjector(NextcloudTalkApplication.class) public class DatabaseStorageModule implements StorageModule { - private static final String TAG = "DatabaseStorageModule"; - @Inject ArbitraryStorageUtils arbitraryStorageUtils; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index e35c6f267..8882e3b77 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -20,9 +20,6 @@ package com.nextcloud.talk.webrtc; -import android.annotation.SuppressLint; -import android.util.Log; - import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.UserEntity; @@ -37,8 +34,6 @@ import java.util.Map; @AutoInjector(NextcloudTalkApplication.class) public class WebSocketConnectionHelper { - private static final String TAG = "WebSocketConnectionHelper"; - private static Map magicWebSocketInstanceMap = new HashMap<>(); @Inject @@ -92,7 +87,6 @@ public class WebSocketConnectionHelper { } } - @SuppressLint("LongLogTag") HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { int apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {2, 1}); From 6aab2d0834165be511c39d4aacb4ff92dc1a5c4b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 May 2021 14:34:22 +0200 Subject: [PATCH 20/23] Fix more ktlint Signed-off-by: Joas Schilling --- .../java/com/nextcloud/talk/controllers/ChatController.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 5c65fe353..13ea5693b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -1654,8 +1654,12 @@ class ChatController(args: Bundle) : val apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) ncApi?.deleteChatMessage( credentials, - ApiUtils.getUrlForChatMessage(apiVersion, conversationUser?.baseUrl, roomToken, - message?.id) + ApiUtils.getUrlForChatMessage( + apiVersion, + conversationUser?.baseUrl, + roomToken, + message?.id + ) )?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer { From 9f0c760c4949562c762b52c868f50af4e86a57bc Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 5 May 2021 14:07:03 +0200 Subject: [PATCH 21/23] Fix capability checking when there could be no user Signed-off-by: Joas Schilling --- .../talk/controllers/ChatController.kt | 34 +++++++++++++++---- .../talk/controllers/ContactsController.java | 2 -- .../controllers/ConversationInfoController.kt | 12 +++++-- .../bottomsheet/OperationsMenuController.java | 6 +++- 4 files changed, 42 insertions(+), 12 deletions(-) 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 13ea5693b..33bf03161 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -334,7 +334,11 @@ class ChatController(args: Bundle) : } private fun handleFromNotification() { - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Can this be called for guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } ncApi?.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, conversationUser?.baseUrl)) ?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread()) @@ -962,7 +966,11 @@ class ChatController(args: Bundle) : if (currentConversation == null || TextUtils.isEmpty(currentConversation?.sessionId) || currentConversation?.sessionId == "0" ) { - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Fix API checking with guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } ncApi?.joinRoom( credentials, @@ -1031,7 +1039,11 @@ class ChatController(args: Bundle) : } private fun leaveRoom() { - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Fix API checking with guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } ncApi?.leaveRoom( credentials, @@ -1221,9 +1233,8 @@ class ChatController(args: Bundle) : } if (!wasDetached) { - var apiVersion: Int + var apiVersion = 1 // FIXME this is a best guess, guests would need to get the capabilities themselves - apiVersion = 1 if (conversationUser != null) { apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) } @@ -1651,7 +1662,12 @@ class ChatController(args: Bundle) : true } R.id.action_delete_message -> { - val apiVersion = ApiUtils.getChatApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Fix API checking with guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } + ncApi?.deleteChatMessage( credentials, ApiUtils.getUrlForChatMessage( @@ -1769,7 +1785,11 @@ class ChatController(args: Bundle) : currentConversation?.name != userMentionClickEvent.userId ) { - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Fix API checking with guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom( apiVersion, conversationUser?.baseUrl, "1", 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 8cde43f6e..a0f4ff797 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -312,9 +312,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), roomOverall.getOcs().getData().getToken()); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), roomOverall.getOcs().getData().getRoomId()); - int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); if (currentUser.hasSpreedFeatureCapability("chat-v2")) { - ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, currentUser.getBaseUrl(), roomOverall.getOcs().getData().getToken())) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index ab8dde0e5..bb774eab3 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -441,7 +441,11 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } private fun getListOfParticipants() { - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Fix API checking with guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } ncApi.getPeersForCall( credentials, @@ -532,7 +536,11 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA } private fun fetchRoomInfo() { - val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + var apiVersion = 1 + // FIXME Fix API checking with guests? + if (conversationUser != null) { + apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(1)) + } ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser!!.baseUrl, conversationToken)) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index 4b1f61976..d3bea42d3 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -185,11 +185,15 @@ public class OperationsMenuController extends BaseController { if (currentUser != null) { credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken()); + int apiVersion; if (!TextUtils.isEmpty(baseUrl) && !baseUrl.equals(currentUser.getBaseUrl())) { credentials = null; + // FIXME joining a public link we need to check other capabilities + apiVersion = 1; + } else { + apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); } - int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {1}); switch (operationCode) { case 2: From fc736b2aff6c8c396301dc94fcefb66186f3541a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 5 May 2021 14:07:28 +0200 Subject: [PATCH 22/23] Fix missing import Signed-off-by: Joas Schilling --- .../nextcloud/talk/controllers/ConversationsListController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index cbd437428..ba9ffb5d6 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -32,6 +32,7 @@ import android.os.Bundle; import android.os.Handler; import android.text.InputType; import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; From 0f7965f4f958876cb83395d82744fdd8be9af50e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 5 May 2021 14:44:52 +0200 Subject: [PATCH 23/23] Readd SuppressLint Signed-off-by: Joas Schilling --- .../nextcloud/talk/controllers/ConversationsListController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index ba9ffb5d6..0fff10672 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -23,6 +23,7 @@ package com.nextcloud.talk.controllers; import android.animation.AnimatorInflater; +import android.annotation.SuppressLint; import android.app.SearchManager; import android.content.Context; import android.content.Intent; @@ -409,6 +410,7 @@ public class ConversationsListController extends BaseController implements Searc searchItem.expandActionView(); } + @SuppressLint("LongLogTag") private void fetchData(boolean fromBottomSheet) { dispose(null);