From 0079107461eac06b9dfedf752ff2d807c7541ce6 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 3 Mar 2022 17:36:58 +0100 Subject: [PATCH] revert commit d76203a0 fix to support older conversationApi versions for canLeave and canDelete Signed-off-by: Marcel Hibbe --- .../controllers/ConversationInfoController.kt | 4 ++-- .../json/conversations/Conversation.java | 19 +++++++++++++++---- .../dialog/ConversationsListBottomDialog.kt | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) 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 c0fee96f2..d1c993e0d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -613,13 +613,13 @@ class ConversationInfoController(args: Bundle) : setupWebinaryView() - if (!conversation!!.canLeave()) { + if (!conversation!!.canLeave(conversationUser)) { binding.leaveConversationAction.visibility = View.GONE } else { binding.leaveConversationAction.visibility = View.VISIBLE } - if (!conversation!!.canDelete()) { + if (!conversation!!.canDelete(conversationUser)) { binding.deleteConversationAction.visibility = View.GONE } else { binding.deleteConversationAction.visibility = View.VISIBLE diff --git a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java index 82e557b29..2888d105d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java @@ -148,12 +148,23 @@ public class Conversation { return (canModerate(conversationUser) && !ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL.equals(type)); } - public boolean canLeave() { - return canLeaveConversation; + public boolean canLeave(UserEntity conversationUser) { + if (canLeaveConversation != null) { + // Available since APIv2 + return canLeaveConversation; + } + // Fallback for APIv1 + return !canModerate(conversationUser) || + (getType() != ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && this.participants.size() > 1); } - public boolean canDelete() { - return canDeleteConversation; + public boolean canDelete(UserEntity conversationUser) { + if (canDeleteConversation != null) { + // Available since APIv2 + return canDeleteConversation; + } + // Fallback for APIv1 + return canModerate(conversationUser); } public String getRoomId() { diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt index ff2b9db97..4679dc4e4 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt @@ -157,7 +157,7 @@ class ConversationsListBottomDialog( ) binding.conversationOperationLeave.visibility = setVisibleIf( - conversation.canLeave() && + conversation.canLeave(currentUser) && // leaving is by api not possible for the last user with moderator permissions. // for now, hide this option for all moderators. !conversation.canModerate(currentUser)